python - 索引错误 : tuple index out of range in showing columns of CSV

标签 python csv

伙计们,我是 python 的新手,我不知道如何解决这个问题。感谢大家的帮助。

import csv

with open("ict.csv", 'r') as csvFile:
    csvRead = csv.reader(csvFile)
    print(csvRead)

#    for line in csvRead :
 #       print(line)

    header = csvFile.readline().strip().split(',')
    print(header)

    entries = []
    for line in csvFile:

        parts = line.strip().split(',')
        row = dict()
        for i, h in enumerate(header):
            row[h] = parts[i]

#        print(row)

        entries.append(row)

    entries.sort(key= lambda r: r['Gen. Ave.'])

    for e in entries [:12]:
        print('{0}Student No.,Gen. Ave. {10:,}'.format(
            e['Student No.'],e['Gen. Ave.']
        ))

学号 |将军大道 |程序 1 | 90.5 | CS

最佳答案

正如评论中指出的那样,问题在于您的格式说明符之一 - {10:,} - 是错误的。最初的 10 告诉 Python 使用提供给 format 的第 10 个参数,但您只提供了两个,因此出现了 IndexError

您实际上想在索引 1 处提供元组的第二个元素,因此将 {10:,} 更改为 {1:,}。此外,格式字符串中的逗号 (,) 运算符 - 告诉格式化程序使用逗号作为千位分隔符 - 只能用于数字输入。 entries['Gen. ave.'] 是字符串,因为是从文件中读取的,所以需要转为数字。此代码应该有效:

for e in entries [:12]:
    print('{0}Student No.,Gen. Ave. {1:,}'.format(
        e['Student No.'], int(e['Gen. Ave.'])
    ))

然而,格式字符串中的位置说明符可以完全删除,因为 Python 将按照参数的写入顺序将参数应用于格式,因此您可以:

for e in entries [:12]:
    print('{}Student No.,Gen. Ave. {:,}'.format(
        e['Student No.'], int(e['Gen. Ave.'])
    ))

最后,您可以使用 csv 模块的 DictReader 避免为 csv 中的每一行手动构建字典。类,它将在读取时为每一行创建一个字典,使您的代码看起来像这样:

 with open("ict.csv", 'r') as csvFile:
    csvRead = csv.DictReader(csvFile)

    entries = []
    for line in csvRead:
        entries.append(line)

entries.sort(key=lambda r: r['Gen. Ave.'])

for e in entries[:12]:
    print('{}Student No.,Gen. Ave. {:,}'.format(e['Student No.'], int(e['Gen. Ave.'])))

关于python - 索引错误 : tuple index out of range in showing columns of CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53796294/

相关文章:

python - 通过多个可能的分隔符分割字符串

python - 使用 Django 管理时未保存 ManyToMany 字段

mysql - 无法从 csv 加载到 mysql 表?

python - 关于 PyQt 示例程序

python - 查找字符串中所有出现的可变时间戳结构

python - 使用 apply 将从一列(具有 json 类型)提取的值插入到另一列

python - 我可以导入 CSV 文件并自动推断分隔符吗?

python - pandas.io.common.CParserError : Error tokenizing data. C 错误:缓冲区溢出被捕获 - 可能是格式错误的输入文件

python - 在python中将带有子字段的Json转换为CSV

python - 通过元组名称将不同命名元组的列表传递给不同的 csv