当我尝试使用以下代码打印第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
似乎我无法同时阅读这两行。真令人沮丧!
答案 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]
您只读取了一次文件,并保存了所需的所有信息。