1

と呼ばれるリストにたくさんのファイルがあります。これをループして、最初の行にfilesあるすべてのファイルを保存しています。//StackOverflowその後に追加のテキストがある場合がありますが、そのようなテキストで行を開始する必要があります。

現在、私は次のように単純にやっています:

matches = []
for file in files:
    with open(file, "r") as inf:
        line = inf.readline()
        if line.strip().startswith("//StackOverflow"):
            matches.append([line] + inf.readlines())

ただし、これを行うためのより良い (より高速な?) 方法があるかどうか疑問に思っていました。これは、すべてのファイルを 1 つずつ開き、常に最初の行を読み取る必要があるためです。

4

2 に答える 2

2

内容を確認する必要がある場合は、すべてのファイルを開く必要があります。あなたが持っているものは、すでに Python でできる最高のものです。

理論的には、ファイルの最初の 15 バイトだけを読み取って、それらが と等しいかどうかを確認できますが、//StackOverflowそれが大きく変わるとは思えません。

with open(file) as inf:
    if inf.read(15) == "//StackOverflow":
        inf.seek(0)
        matches.append(inf.readlines())
于 2012-12-25T10:19:18.303 に答える
1

Linux を使用している場合はfindheadやなどの組み込みツールの使用を検討してくださいgrep。それらは C/C++ で書かれており、はるかに高速です。

于 2012-12-25T10:16:16.170 に答える