如何从文件中读取特定行(按行号)?

新手上路,请多包涵

我正在使用 for 循环读取文件,但我只想读取特定行,比如行 #26#30 是否有任何内置功能可以实现此目的?

原文由 eozzy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 370
2 个回答

如果要读取的文件很大,并且您不想一次读取内存中的整个文件:

 fp = open("file")
for i, line in enumerate(fp):
    if i == 25:
        # 26th line
    elif i == 29:
        # 30th line
    elif i > 29:
        break
fp.close()

请注意 i == n-1 对于 n th 行。


在 Python 2.6 或更高版本中:

 with open("file") as fp:
    for i, line in enumerate(fp):
        if i == 25:
            # 26th line
        elif i == 29:
            # 30th line
        elif i > 29:
            break

原文由 Alok Singhal 发布,翻译遵循 CC BY-SA 3.0 许可协议

快速回答:

 f=open('filename')
lines=f.readlines()
print lines[25]
print lines[29]

要么:

 lines=[25, 29]
i=0
f=open('filename')
for line in f:
    if i in lines:
        print i
    i+=1

有一个更优雅的提取多行的解决方案: linecache (由 “python:如何跳转到一个巨大的文本文件中的特定行?” ,stackoverflow.com 之前的一个问题提供)。

引用上面链接的 python 文档:

 >>> import linecache
>>> linecache.getline('/etc/passwd', 4)
'sys:x:3:3:sys:/dev:/bin/sh\n'

4 更改为您想要的行号,然后就可以了。请注意,4 会带来第五行,因为计数是从零开始的。

如果文件可能非常大,并且在读入内存时会导致问题,那么采用 @Alok 的建议并使用 enumerate() 可能是个好主意。

总结:

  • 使用 fileobject.readlines()for line in fileobject 作为小文件的快速解决方案。
  • 使用 linecache 以获得更优雅的解决方案,这对于读取许多文件来说非常快,并且可能会重复。
  • 接受 @Alok 的建议并使用 enumerate() 用于可能非常大且无法放入内存的文件。请注意,使用此方法可能会变慢,因为文件是按顺序读取的。

原文由 Adam Matan 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题