如何按行号读取文件中的特定行?
我在用一个for
循环来读取一个文件,但我只想读取特定的行,比如第#26
行和第#30
行。有没有什么内置的功能可以做到这一点?
30 个回答
42
为了提供另一种解决方案:
import linecache
linecache.getline('Sample.txt', Number_of_Line)
希望这个方法简单快速 :)
200
快速回答:
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: 如何在一个巨大的文本文件中跳到特定行?”)。
引用上面链接的python文档:
>>> import linecache
>>> linecache.getline('/etc/passwd', 4)
'sys:x:3:3:sys:/dev:/bin/sh\n'
把 4
改成你想要的行号就可以了。注意,4代表的是第五行,因为行号是从0开始计算的。
如果文件可能非常大,读取到内存中可能会出现问题,那么可以考虑听听 @Alok的建议,使用enumerate()。
总结:
- 对于小文件,可以快速使用
fileobject.readlines()
或for line in fileobject
。 - 对于需要读取很多文件的情况,使用
linecache
会更优雅,速度也很快。 - 如果文件可能非常大,无法全部放入内存,建议听取 @Alok的建议,使用
enumerate()
。不过要注意,这种方法可能会比较慢,因为文件是按顺序读取的。
335
如果要读取的文件很大,而你又不想一次性把整个文件都加载到内存中:
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()
请注意,对于第 n
行来说,i == n-1
。
在 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