我正在用 Python 为 RawTherapee 编写一个插件。我需要从目录树中可能存在的名为“AboutThisBuild.txt”的文件中提取版本号。尽管 RawTherapee 知道它的安装位置,但这些数据被烘焙到二进制文件中。
我的插件旨在在没有任何命令行参数的情况下收集基本系统数据,以进行短路故障排除。通过获得版本号、修订号和变更集(AKA Mercurial),我可以理清为什么脚本可能无法按预期工作。好的,这就是上下文。
我尝试了多种方法,其中一些建议在本网站的其他地方。主要的是使用 os.walk 和 fnmatch。
问题是速度。搜索整个目录树就像看着油漆变干!
为了减少负载,我试图预测可能的隐藏位置,并且只遍历这些位置。这更快,但具有丢失某些文件的明显缺点。
这就是我目前所拥有的。在 Linux 但尚未在 Windows 上进行测试,因为我仍在研究文件的放置位置。
import fnmatch
import os
import sys
rootPath = ('/usr/share/doc/rawtherapee',
'~',
'/media/CoreData/opt/',
'/opt')
pattern = 'AboutThisBuild.txt'
# Return the first instance of RT found in the paths searched
for CheckPath in rootPath:
print("\n")
print(">>>>>>>>>>>>> " + CheckPath)
print("\n")
for root, dirs, files in os.walk(CheckPath, True, None, False):
for filename in fnmatch.filter(files, pattern):
print( os.path.join(root, filename))
break
通常,“AboutThisBuild.txt”存储在名为“rawtherapee”的目录/子目录中,或者在目录树中的某处具有字符串。尽管我可以得到 5000 个奇怪的目录名称并在这些目录中搜索“rawtherapee”,然后使用 os.walk 遍历这些目录,但我天真地认为,但我查看过的所有模块和函数(再次)整理目录中的所有文件。
任何人都有更快的搜索整个目录树的方法,还是我坚持使用这种混合选项?