Python 2.7.5 Win/Mac。在
我正在尝试找到在多个存储(大约128Tio)上搜索文件(超过10000个)的最佳方法。这些文件有特定的扩展名,我可以忽略一些文件夹。在
这是我第一个使用os.listdir
和递归的函数:
count = 0
def SearchFiles1(path):
global count
pathList = os.listdir(path)
for i in pathList:
subPath = path+os.path.sep+i
if os.path.isfile(subPath) == True :
fileName = os.path.basename(subPath)
extension = fileName[fileName.rfind("."):]
if ".ext1" in extension or ".ext2" in extension or ".ext3" in extension:
count += 1
#do stuff . . .
else :
if os.path.isdir(subPath) == True:
if not "UselessFolder1" in subPath and not "UselessFolder1" in subPath:
SearchFiles1(subPath)
它很管用,但我认为它可能会更好(更快更合适),还是我错了?在
所以我尝试了os.path.walk
:
“计数”是错误的,而且速度较慢。我想我真的不明白path.walk
是怎么工作的。在
我的问题是:我能做些什么来优化这项研究?在
因此,经过测试和与tdelaney的讨论,我优化了两种解决方案,如下所示:
它在Mac/pcv2.7.5上运行良好
关于速度这是完全平衡的。在
您的第一个解决方案是合理的,除了可以使用
os.path.splitext
。在第二个解决方案中,它是不正确的,因为您重新访问每个子目录的文件列表,而不是只处理一次。使用os.path.walk
的诀窍是从subdirs
中删除的目录不是下一轮枚举的一部分。在单个文件存储单元的枚举速度只能这么快。加快速度的最佳方法是在不同的线程中运行不同存储单元的枚举。在
相关问题 更多 >
编程相关推荐