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())

但是,我想知道是否有更好(更快?)的方法来执行此操作,因为现在我必须一个一个地打开每个文件并始终阅读第一行。

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,您可能会考虑使用内置工具,find例如headgrep. 它们是用 C/C++ 编写的,而且速度更快。

于 2012-12-25T10:16:16.170 回答