首页 > 解决方案 > python中的拆分方法正在输出索引错误

问题描述

该程序接收一个 txt 文件并打印出每行的第一个单词。它工作得很好,但最后它打印出这个错误

Traceback (most recent call last):
  File "C:/Users/vipku/PycharmProjects/untitled/test.py", line 7, in <module>
    print(f.readline().split()[0])
IndexError: list index out of range

这是我写的代码

f = open("example.txt", "r")
for line in f:
    for first in line:
        print(f.readline().split()[0])

标签: pythonpython-3.x

解决方案


请注意:

f = open("example.txt", "r")
for line in f:
    for first in line:

实际上意味着:

open file "example.txt" for reading
for every line in that file:
    for every character in that line:

因此,这意味着您执行readline的行数是实际行数的更多倍-因此,您str从得到空readline,正如文档所说,如果 f.readline() 返回一个空字符串,则已到达文件末尾,而表示空行by '\n',一个只包含一个换行符的字符串。

for如果要逐行处理,使用 single 就足够了。您应该检查空行(由单个换行符组成的行 -.split在它们处使用会导致空列表),因此解决方案可能如下所示:

f = open("example.txt", "r")
for line in f:
    words = line.split()
    if words:
        print(words[0])
f.close()

words我利用空列表是 False-y 和非空列表 True-y 的事实,因此仅当至少有 1 个元素时才会执行打印。请注意,文件应在使用后关闭。您可能会隐式执行此操作,也可以使用with open... 方法。您可以从这个 realpython 教程中了解后者。


推荐阅读