我在文本文件中有这些数据:
A, 2, 1500
B, 5, 2000
C, 8, 2500
D, 10, 4000
E, 12, 4800
F, 18, 5300
我有这个程序打印错误列表超出范围:
def readfile(fname):
txt = open(fname)
txt1 = txt.read()
new_list = []
for i in txt1:
split = i.split(', ')
new_list.append({'Car': split[0], 'Seat': int(split[1]), 'cost': int(split[2])})
readfile('car.txt')
任何建议以及如何解决它...谢谢
答案 0 :(得分:4)
错误的实际原因是您正在调用text.read()
(当您应该调用text.readlines()
时。然后您最终会迭代每个字符!
在创建字典并将其附加到列表之前,您可以使用if
检查来测试该行的内容。
def readfile(fname):
c = ['Car', 'Seat', 'Cost']
new_list = []
with open(fname) as f:
for line in f:
if line.strip():
new_list.append(dict(zip(c, i.split(', '))))
return new_list
其他挑剔 -
with...as
,这样您就不必致电file.close
dict
+ zip
将无需对您的列表编制进行硬编码。答案 1 :(得分:4)
我不同意上一张海报。当你调用txt.read()时,Python正在将整个文件读入一个名为txt1
的字符串中。然后,你的for循环遍历字符串中的每个字符。因此,在第一次迭代中,i
仅包含字符A
。这意味着当尝试在单个字符上调用split()
时,将返回单个项目,并且返回列表的长度为1.当您评估split[1]
时,您正在索引超出返回的结尾list和Python引发索引超出范围错误。
要解决此问题,请尝试readlines()
功能。
答案 2 :(得分:0)
如果你提出的代码是精确副本 - 那么你的错误就在这里:
split = i.split(', ')
您在逗号之后使用了两个空格而不是一个,并且您的split方法不会剪切输入字符串(每个逗号后只有一个空格)