python:检查特定字符串是不是是文件名的一部分
Posted
技术标签:
【中文标题】python:检查特定字符串是不是是文件名的一部分【英文标题】:python: check if a specific string is part of a filenamepython:检查特定字符串是否是文件名的一部分 【发布时间】:2022-01-09 22:33:39 【问题描述】:我有一个列表,其中每个条目由 5 个单独的随机数组成:
列表输出:
...
['00349']
['02300']
['00020']
...
现在我有两个嵌套的 for 循环。外部循环遍历这个列表。内部循环遍历位于单独目录中的大量文件。目的是我想检查列表中的每个条目是否包含在其中一个文件名中。如果是这样,我想将这些文件复制到一个单独的目标目录中并打破内部循环,因为找到该项目并继续列表中的下一个条目。
文件结构示例:
name_01043.json
我尝试了几件事(见下文),但以下版本总是返回 false。
到目前为止,这是我的代码:
from re import search
import fnmatch
list = []
# some code to fill the list
SOURCE_PATH = "dir/source"
TARGET_PATH = "dir/target"
for item in list:
for fname in os.listdir(SOURCE_PATH):
# check if fname contains item name:
strg1 = str(fname)
strg2 = str(item)
if fnmatch.fnmatch(fname, strg2):
# if fnmatch.fnmatch(fname, '*' + strg2 + '*'):
sourcepath = os.path.join(SOURCE_PATH, fname)
shutil.copy(sourcepath, TARGET_PATH)
break
【问题讨论】:
【参考方案1】:这是一个可以充分利用 glob 模块的示例:
import glob
import os
import shutil
SOURCE_PATH = 'dir/source'
TARGET_PATH = 'dir/target'
# just use some hard-coded values for the sake of example
mylist = ['00349', '02300', '00020']
for e in mylist:
for file in glob.glob(os.path.join(SOURCE_PATH, f'*e*')):
shutil.copy(file, TARGET_PATH)
【讨论】:
首先。谢谢你的帮助。我试过你的版本,但不幸的是,SOURCE_PATH 中的所有文件都被复制到了 TARGET_PATH,而不仅仅是列表中的那些。 也许所有文件都与您列表中的模式匹配。提供的答案绝对是选择性的。不幸的是,如果不知道您的列表和 SOURCE_PATH 内容,就无法解释发生了什么【参考方案2】:你可以这样使用:
for path, subdirs, files in os.walk(SOURCE_PATH):
for file in files:
if strg2 in str(file):
# Do something
这将返回该位置的每个路径、子目录和文件。您可以通过这种方式逐个文件检查,只需检查str(file)
是否包含您需要的字符串
【讨论】:
以上是关于python:检查特定字符串是不是是文件名的一部分的主要内容,如果未能解决你的问题,请参考以下文章
如何在python中以自动方式检查文件夹中是不是存在特定文件
如何检查一个字符串在 python 中是不是有多个特定字符。示例字符串“mood”显然有两个“o”字符[重复]