PythonでRawTherapeeのプラグインを書いています。ディレクトリ ツリーのどこかに存在する「AboutThisBuild.txt」というファイルからバージョン番号を抽出する必要があります。RawTherapee はどこにインストールされているかを認識していますが、このデータはバイナリ ファイルに焼き付けられています。
使用しているプラグインは、ショート サーキットのトラブルシューティングを目的として、コマンド ライン パラメーターを指定せずに実行すると、基本的なシステム データを収集するように設計されています。バージョン番号、リビジョン番号、および変更セット (別名 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を使用してそれらのディレクトリをトラバースすることができましたが、私が見たすべてのモジュールと関数はディレクトリ内のすべてのファイルを照合することができました(再び)。
ディレクトリ ツリー全体をすばやく検索する方法を知っている人はいますか?それとも、このハイブリッド オプションにこだわっていますか?