我正在使用 for
循环读取文件,但我只想读取特定行,比如行 #26
和 #30
是否有任何内置功能可以实现此目的?
原文由 eozzy 发布,翻译遵循 CC BY-SA 4.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
以获得更优雅的解决方案,这对于读取许多文件来说非常快,并且可能会重复。enumerate()
用于可能非常大且无法放入内存的文件。请注意,使用此方法可能会变慢,因为文件是按顺序读取的。原文由 Adam Matan 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
2 回答848 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
如果要读取的文件很大,并且您不想一次读取内存中的整个文件:
请注意
i == n-1
对于n
th 行。在 Python 2.6 或更高版本中: