0

我有一个列表,其中每个条目由 5 个单独的随机数组成:

列表输出:

...
['00349']
['02300']
['00020']
...

现在我有两个嵌套的 for 循环。外部循环遍历这个列表。内部循环遍历位于单独目录中的大量文件。目的是我想检查列表中的每个条目是否包含在其中一个文件名中。如果是这样,我想将这些文件复制到一个单独的目标目录中并打破内部循环,因为找到该项目并继续列表中的下一个条目。

文件结构示例:

name_01043.json

我尝试了几件事(见下文),但以下版本总是返回错误。

到目前为止,这是我的代码:

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
4

2 回答 2

1

你可以使用这样的东西:

for path, subdirs, files in os.walk(SOURCE_PATH):
    for file in files:
        if strg2 in str(file):
            # Do something

这将返回该位置的每个路径、子目录和文件。您可以通过这种方式逐个文件检查,只需检查其中是否str(file)包含您需要的字符串

于 2021-12-03T15:01:06.987 回答
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)
于 2021-12-03T15:13:16.407 回答