1

特定の文字列/メタデータ、16 進タグなどのために何千ものファイルを検索する必要がありますが、私が行ったこの python コードは、非常に長い時間がかかる 1 つのファイルのみを検索します。

def check():
        datafile = file('example.txt')
        found = False
        for line in datafile:
            if blabla in line:
                found = True
                break

        return found

found = check()
if found:
    print "true"
else:
    print "false"

助言がありますか?ありがとう

4

4 に答える 4

0

すべてのファイルが単一のディレクトリにある場合は、os.listdir(). これにより、ディレクトリ内のすべてのファイルのリストが表示されます。そこから、たとえば でそれぞれにアクセスできますos.listdir('/home/me/myData')。Unix ベースのシステムを使用している場合:grepは非常に強力なツールであり、柔軟性が大幅に向上します。あなたが望むかもしれませんgrep -r "your query" ./ > results.txt。これにより、検索に一致するすべての行が得られ、正規表現を使用するオプションが含まれます...そしてファイルに保存されます。それ以外の場合、Python のみで多くのファイルを検索するには:

def check(x):
    return "blabla" in x
files = os.listdir('/home/me/files')
for f in files:
    x = open(f, "r").read()
    print check(x)

私のチェック機能は、行ごとにチェックせず、大文字で出力されるため、動作が異なりTrueますFalse

結果がどのファイルから来たのか知りたいと思うかもしれません。(そして何行目?)

for f in files:
    x = open(f, "r").read().split('\n')
    for count in range( len(x) ):
        if check(x[count]):
            print f + " " + count + " " +x[count]

...またはあなたが知る必要があることは何でも。

于 2013-03-21T16:45:34.293 に答える
0

globファイル名を検討またはos.walk取得したい場合がありますが、次のようなものです。

import fileinput

print any(blabla in line for line in fileinput.input(['some', 'list', 'of', 'file', 'names'])

これにより、ファイルが順番に自動的に読み取られ、真実のテストでショート サーキットが発生します。

于 2013-03-21T16:29:13.170 に答える
0

ファイル名/パスを関数へのパラメーターにします。その後、関数は特定の 1 つのファイルだけでなく、任意のファイルを処理できます。次に、処理するファイルごとに関数を呼び出します。おそらく、処理するファイル名/パスのリストを作成してから、各ファイルに対して必要なことを実行するループを作成する必要があります。

例えば。

def check(fname):
    datafile = open(fname)
    found = False
    # ...
    return found

files = ['a', 'b', 'c']
for fname in files:
    found = check(fname)
    if found:
        print("true")
    else:
        print("false")
于 2013-03-21T16:20:18.900 に答える