python从当前行读取文件

时间:2013-02-18 17:09:08

标签: python file-read

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

我想要做的是,程序会在文件中找到一个特定的行(比如它是第x行),它需要在文件中找到另一个符号(第#行)。一旦找到该行,再次从(行#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 ....

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

由于

2 个答案:

答案 0 :(得分:2)

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

这只有在将文件对象用作迭代器(无for line in fileobject)next(fileobject))时才有效,因为它使用的预读缓冲区会使确切的模糊不清位置。

相反,请使用:

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

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

答案 1 :(得分: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)中。