如何修复列表超出范围

时间:2017-10-26 14:02:09

标签: python python-3.x

我在文本文件中有这些数据:

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')

任何建议以及如何解决它...谢谢

3 个答案:

答案 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方法不会剪切输入字符串(每个逗号后只有一个空格)