如何按行号读取文件中的特定行?

289 投票
30 回答
794078 浏览
提问于 2025-04-15 18:07

我在用一个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

撰写回答