在指定行范围内读取文本文件

8

是否可以从文本文件中读取一定范围的行,例如从第20行到第52行?

我是这样打开并读取文件的:

text_file = open(file_to_save, "r")
line = text_file.readline()

但是我只想保存在一定范围内的数据,或者如果可以的话,从包含“--- data ---”的一行读取到包含“-- end of data --”的另一行。

我已经查看了文档和在线示例,只能找到指定新行或其他内容的示例。


谢谢,我现在会查看他们的文档。 - user2061913
3个回答

28
您可以在文件对象上使用 itertools.islice(),并使用迭代仅读取特定行:
import itertools

with open(file_to_save, "r") as text_file:
    for line in itertools.islice(text_file, 19, 52):
         # do something with line

会读取20至52行;Python使用基于0的索引,因此第一行编号为0。
使用文件对象作为迭代器可以提供很大的灵活性;例如,通过在文件对象上调用next()函数来读取额外的行,同时推进'指针'所在的行。
当将文件作为可迭代对象时,不要使用readline();这两种技术不容易混合使用。

2
如果您想从文件中读取一些行的样本,您需要按顺序读取它们吗?或者,如果您想要读取第25行和第12行,您应该先读取第12行吗? - wwii
@wwii:你可以使用 file.seek() 进行随机访问,但是之后你需要手动搜索换行符,并且你无法知道行数的 数量。除非你的文件格式使用固定长度的行,否则如果需要读取特定行,按顺序读取会更加容易。 - Martijn Pieters

8

你可以做两件事情。你可以使用enumerate()函数,并使用一个if语句:

text_file = open(file_to_save, "r")
lines = []
for index, text in enumerate(text_file):
    if 19 <= index <= 51:
        lines.append(text)

或者,你可以使用readlines()然后切片:
text_file = open(file_to_save, "r")
lines = text_file.readlines()
lines = lines[19:52]

3
倒数第二行中的'readline()' 应改为 'readlines()'. - Eliezer Miron

-1

嗯,你可以尝试使用while循环来做一些事情...但是你应该知道你想要加载文本的字符串是到哪里的,这不是最好的方法:

text_file=open(name,'r')
line=text.readline()
while line!=(" ") #type the line where you want it to stop
print (line

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接