伙计们,我是 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/