Python Can';t使用readlines()同时读取两行,索引超出范围错误

Python Can';t使用readlines()同时读取两行,索引超出范围错误,python,readlines,Python,Readlines,我有一些文本文件包含7行,当我尝试使用以下代码打印第3行和第4行时,它会打印第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: li

我有一些文本文件包含7行,当我尝试使用以下代码打印第3行和第4行时,它会打印第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
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: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_3 = fRead.readlines()[3]
                print line_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_4 = fRead.readlines()[4]
                print line_4

似乎我不能同时读这两行。这太令人沮丧了

如文件中所述:

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

_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

如文件所述:

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

_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
方法
readlines()
读取文件中的所有行,直到到达EOF(文件末尾)。 然后,“游标”位于文件末尾,随后调用
readlines()
将不会产生任何结果,因为EOF是直接找到的

因此,在
line_3=fRead.readlines()[3]
之后,您已经使用了整个文件,但只存储了文件的第四行(!)(如果您开始将行数为1)

如果你这样做

all_lines =  fRead.readlines()
line_3 = all_lines[3]
line_4 = all_lines[4]
您只读取了一次文件,并保存了所需的所有信息。

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

因此,在
line_3=fRead.readlines()[3]
之后,您已经使用了整个文件,但只存储了文件的第四行(!)(如果您开始将行数为1)

如果你这样做

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

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

因为您使用了文件对象。它只能迭代一次。第一次调用
readlines()
会给出一个列表,之后您只需要特定索引处的数据,那么为什么每次都要尝试读取整个文件两次以获取单个索引处的值呢?太棒了!感谢您解释readlines()函数的工作原理!不客气。对不起,我遇到了比我预想的更严厉的情况。我只是想让你质疑逻辑,了解自己的理解:)@roganjosh有人读了新的行为准则:)因为你使用了文件对象。它只能迭代一次。第一次调用
readlines()
会给出一个列表,之后您只需要特定索引处的数据,那么为什么每次都要尝试读取整个文件两次以获取单个索引处的值呢?太棒了!感谢您解释readlines()函数的工作原理!不客气。对不起,我遇到了比我预想的更严厉的情况。我只是想让你质疑逻辑,了解自己:)@roganjosh有人读了新的行为准则:)太棒了!感谢您解释readlines()函数的工作原理!令人惊叹的!感谢您解释readlines()函数的工作原理!令人惊叹的!感谢您解释readlines()函数的工作原理!令人惊叹的!感谢您解释readlines()函数的工作原理!