搜索具有不同文件扩展名的多个文件(Python3)



我一直在尝试使用Python 3在根文件系统中搜索不同的文件扩展名,如.mp3、.mp4、.png、.jpg和其他媒体类型。

我使用bash:成功地做到了这一点

find / -name '*.jpg' -o -name '*.mp4' -o -name '*.flv' -o -name '*.avi' -o -name '*.wmv' -o -name '*.mov' -o -name '*.png' -o -name '*.jpg' -o -name '*.tif' -o -name '*.gif' -o -name '*.mp3' -o -name '*.wmv' -o -name '*.wma' -o -name '*.aif' -o -name '*.jar'

我已经能够使用subprocess.call(command.split(command))使用该代码

但如果可以的话,我宁愿不在我的python代码中使用bash命令

我已经成功地使用了这个代码

with open('logTest.txt', 'a+') as f:
os.chdir('/')
for file in glob.iglob('**/*.mp3', recursive=True):
f.write(file + 'n')
print(file)

这将打开日志文件,并成功地从根文件系统找到所有.mp3文件。但正如您可能发现的那样,它找不到任何其他媒体文件类型。我希望能在蟒蛇身上做到这一点。我看过栈溢出的例子,也见过其他例子,但它们似乎从来没有达到我想要的效果。它们要么不运行或打印任何内容,要么确实有效,但一次只能使用一个文件扩展名。

我们非常感谢对这个问题的任何帮助。

(很抱歉,如果这个问题重复了很多(

不幸的是,使用glob无法在一次传递中匹配多个扩展。您必须合并来自单独调用的结果。

正如Poshi建议的那样,尝试使用os.walk()

下面的代码遍历每个目录中的每个文件,并检查文件名是否以任何扩展名结尾。

import os
extensions = ('.jpg', '.mp4', '.flv', '.avi', '.wmv', '.mov', '.png', '.tif', 
'.gif', '.mp3', '.wma', '.aif', '.jar')
with open('logTest.txt', 'a+') as f:
for root, dirs, files in os.walk('/'):
for filename in files:
if any(filename.endswith(extension) for extension in extensions):
filepath = os.path.join(root, filename)
f.write(filepath + 'n')
print(filepath)
extensions = [".png", ".svg", ".jpeg", ".pdf", ".tex"]
output_exists = False
for extension in extensions:
output_exists = output_exists and any(
[file.exists for file in output_path.rglob(f"**/*{extension}")]
)

最新更新