我有多个目录,每个目录都有成千上万的文件(10k +)。让我们选择一个包含10k文件的目录A
。我还有另一个目录(将其称为B
),该目录具有成千上万个文件。我正在尝试查找同时出现在A
和B
中并具有特定文件扩展名(例如.docx
)的所有文件。我可以轻松地应用嵌套的for循环,但是由于文件数以千计,所以需要很多时间。 python中有没有更快的方法来执行它?您要建议的任何特定算法或任何代码段?
注意-我知道如何以多种方式搜索和获取文件,我要求提供最快的方法的建议,文件数以百万计,一次又一次地迭代将花费资源。.
答案 0 :(得分:1)
在python中比较目录的规范方法似乎是filecmp.dircmp()
。
cmp = filecmp.dircmp('/path/to/A', '/path/to/B')
matchingfiles = [filename for filename in cmp.common_files if filename.endswith('.docx')]
我无法具体说明其性能,但我认为它的实现方式将比嵌套for
循环更有效。
答案 1 :(得分:0)
您可以这样:
import os
[x for x in os.listdir('A') if x.endswith('.docx')]
这将在“ A”文件夹中选择“ .docx”文件。
答案 2 :(得分:0)
尝试使用glob
模块:
import glob
glob.glob('/*')
输出(Ubuntu 18.04):
['/bin', '/boot', '/cache', '/data', '/dev', '/etc', '/home', '/init', '/lib', '/lib64', '/media', '/mnt', '/opt', '/proc', '/root', '/run', '/sbin', '/snap', '/srv', '/sys', '/tmp', '/usr', '/var']
当然,您还可以使用其他方法:
glob.glob("*.docx")