在目录中搜索文件的最快方法-Python

时间:2018-08-30 13:57:23

标签: python pandas

我有多个目录,每个目录都有成千上万的文件(10k +)。让我们选择一个包含10k文件的目录A。我还有另一个目录(将其称为B),该目录具有成千上万个文件。我正在尝试查找同时出现在AB中并具有特定文件扩展名(例如.docx)的所有文件。我可以轻松地应用嵌套的for循环,但是由于文件数以千计,所以需要很多时间。 python中有没有更快的方法来执行它?您要建议的任何特定算法或任何代码段?

注意-我知道如何以多种方式搜索和获取文件,我要求提供最快的方法的建议,文件数以百万计,一次又一次地迭代将花费资源。.

3 个答案:

答案 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")