在列表推导中使用os.walk()在Python中查找文件?

时间:2017-05-15 20:58:21

标签: python directory glob os.walk

我一直在Python中使用os.walk()方法来列出可以找到特定文件的所有文件夹和子文件夹的路径。

我已经厌倦了使用一堆循环和elifs,并将它们全部打包成一个(非常混乱的)列表理解,这非常符合我的想法:

import os    
directory = "C:\\Users\\User\\Documents"
file_name = "example_file.txt"    
list_of_paths = [path for path in (os_tuple[0] for os_tuple in os.walk(directory) if file_name in (item.lower() for item in os_tuple[2]))]

我有两个问题。第一个也是最重要的是:有更有效的方法吗?我经常希望在尽可能多的文件夹中找到几百个文件,如果在服务器上,它可能需要几分钟。

第二个问题是:我怎样才能让它更具可读性?在列表理解中有两个生成器理解感觉非常混乱。

更新:我被告知使用Glob,所以很自然我不得不尝试一下。它似乎与我对os.walk()的列表理解一样好用。因此,我的下一步是在几个不同的文件和文件夹上测试这两个版本。

import glob
directory = "C:\\Users\\User\\Documents"
file_name = "example_file.txt"
list_of_paths = [path.lower().replace(("\\" + file_name), "") for path in (glob.glob(directory + "/**/*" + file_name, recursive=True))]

非常欢迎任何其他评论。

更新2:在测试两种方法之后,我得到的结果表明os.walk()方法的速度是glob.glob()方法的两倍。测试是在大约400个文件夹上进行的,共有326份我正在寻找的文件。

0 个答案:

没有答案