如何在 fnmatch 中循环列表

How to loop list in fnmatch

如果在名为 'file' 的列表中找到文件,我正在尝试将文件从当前目录移动到当前目录中名为 'python' 的目录。结果名为“1245”的文件将保留在同一目录中。我正在尝试使用 fnmatch 来匹配模式,以便可以移动名称中包含 123 的所有文件。

import fnmatch
import os
import shutil
list_of_files_in_directory = ['1234', '1245', '1236', 'abc']
file = ['123', 'abc']


for f in os.listdir('.'):
    if fnmatch.fnmatch(f, file):
        shutil.move(f, 'python')

这会引发以下错误: 类型错误:应为 str、bytes 或 os.PathLike 对象,而不是列表

for f in os.listdir('.'):
    if fnmatch.fnmatch(f, file+'*'):
        shutil.move(f, 'python')

这会引发以下错误 类型错误:只能将列表(不是“str”)连接到列表

file 是一个列表,您不能将其作为模式传递给 fnmatch

我猜你想要这样的东西

for f in os.listdir('.'):
    if any(fnmatch.fnmatch(f, pat+'*') for pat in file):
        shutil.move(f, 'python')

虽然可以说 file 应该重命名为 patterns