0

我有一个关于使用 python 处理跟踪文件的问题(它包含十亿行数据)。

我想要做的是,程序会在文件中找到一个特定的行(比如说它是 line#x),它需要从文件中的这个(line#x)中找到另一个符号。找到该行后,再次从 (line# x) 开始搜索另一行。

我现在所做的如下,但问题是它总是需要重新打开文件并从头开始读取以找到匹配的文件(行#> x,并包含我想要的符号)。对于一个大的跟踪文件,处理时间太长。

1.

    for line in file.readlines()
      i++ #update the line number
      if i > x:
          if (line.find()):

或者:

   for i, line in enumerate(open(file)):
      if i > x:
          if ....

任何人都可以给我一个关于更好想法的提示吗?

谢谢

4

2 回答 2

2

如果文件在其他方面稳定,请使用fileobj.tell()记住您在文件中的位置,然后下次使用fileobj.seek(pos)返回到文件中的相同位置。

这仅在您将文件对象用作迭代器(否for line in fileobject)next(fileobject))时才有效,因为它使用会掩盖确切位置的预读缓冲区。

相反,使用:

for line in iter(fileobj.readline, ''):

仍然fileobj在迭代上下文中使用。

于 2013-02-18T17:13:23.823 回答
0

我建议您使用随机访问,并记录您的线路开始的位置。就像是:

index = []

fh = open(gash.txt)

for line in fh:
    if target in line:
        index.append(fh.tell() - len(line))

然后,当您想调用内容时,使用fh.seek(index[n])

几个“陷阱”:

  1. 请注意,索引位置不会与行号相同。如果您需要行号,则可以使用字典,以行号作为键。

  2. 在 Windows 上,您必须将文件位置调整为 -1。这是因为 "\r" 被去掉了,没有出现在len(line).

于 2013-02-18T17:21:41.000 回答