无法使用readlines()索引超出范围错误同时读取两行

时间:2018-08-09 16:54:30

标签: python readlines

当我尝试使用以下代码打印第3行和第4行时,我有一些文本文件包含7行,它打印了第3行,然后给出了超出范围错误的索引

for root, subFolders, files in os.walk(folder):
    for file in files:
        if file.endswith('Init.txt'):
            with open(os.path.join(root, file), 'r') as fRead:
                line_3 = fRead.readlines()[3]
                line_4 = fRead.readlines()[4]
                print line_3
                print line_4

但是,当我运行以下任一代码时,都不会出错

代码1:第3行正确打印

for root, subFolders, files in os.walk(folder):
    for file in files:
        if file.endswith('Init.txt'):
            with open(os.path.join(root, file), 'r') as fRead:
                line_3 = fRead.readlines()[3]
                print line_3

代码2:第4行正确打印

for root, subFolders, files in os.walk(folder):
    for file in files:
        if file.endswith('Init.txt'):
            with open(os.path.join(root, file), 'r') as fRead:
                line_4 = fRead.readlines()[4]
                print line_4

似乎我无法同时阅读这两行。真令人沮丧!

2 个答案:

答案 0 :(得分:3)

如文档中所述:

  

关于内置函数阅读行的帮助:

     _io.TextIOWrapper实例的

readlines(hint = -1,/)方法       返回流中的行列表。

hint can be specified to control the number of lines read: no more
lines will be read if the total size (in bytes/characters) of all
lines so far exceeds hint.

使用完所有行后,对readlines的下一次调用将为空。

更改功能以将结果存储在临时变量中

with open(os.path.join(root, file)) as fRead:
    lines = fRead.readlines()
    line_3 = lines[3]
    line_4 = lines[4]
    print line_3
    print line_4

答案 1 :(得分:1)

方法readlines()读取文件中的所有行,直到命中EOF(文件结尾)为止。 然后,“光标”位于文件的末尾,随后对readlines()的调用将不会产生任何结果,因为直接找到了EOF。

因此,line_3 = fRead.readlines()[3]之后,您已经消耗了整个文件,但是仅存储了文件的第四行(!)(如果您开始将行数记为1)。

如果您这样做

all_lines =  fRead.readlines()
line_3 = all_lines[3]
line_4 = all_lines[4]

您只读取了一次文件,并保存了所需的所有信息。