为什么CSV到Python字典代码会给出索引器错误?

2024-05-20 22:25:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写代码,从Python中的CSV文件生成一个全局字典。代码没有达到我的预期

用户.csv

name,money_in_pocket
siem,10
bart,10
ivar,10

测试.py

import csv
global users
users = {}   
with open('users.csv', mode='r') as readuserfile:
    readusers = csv.reader(readuserfile, delimiter=',')
    next(readusers)
    for rows in readusers:
        users[rows[0]] = float(rows[1])

运行完这段代码后,我希望Shell中会发生以下情况:

>>>print(dict)
{'siem': 10, 'bart': 10, 'ivar': 10}

相反,运行test.py会引发下一个错误:

Traceback (most recent call last):
----File "C:\Users\siemd\Desktop\test.py", line 8, in
--------users[rows[0]] = float(rows[1])
IndexError: list index out of range

如果我理解正确,那么rows[0]rows[1]就不能返回值,因为它们超出了“list”的范围(这是一个读取的csv文件)。
但他们应该。。。是吗


Tags: 文件csv代码inpytestfloatusers
1条回答
网友
1楼 · 发布于 2024-05-20 22:25:47

您应该检查rows的长度和类型。试过你的例子:

$cat t.py
import csv
global users
users = {}
with open('users.csv', mode='r') as readuserfile:
    readusers = csv.reader(readuserfile, delimiter=',')
    next(readusers)
    for rows in readusers:
        users[rows[0]] = float(rows[1])

print users
$cat users.csv
name,money_in_pocket
siem,10
bart,10
ivar,10
$python t.py
{'ivar': 10.0, 'bart': 10.0, 'siem': 10.0}
$

很好用。但如果结尾有一条新线,它就失败了:

$cat >> users.csv

$python t.py
Traceback (most recent call last):
  File "t.py", line 8, in <module>
    users[rows[0]] = float(rows[1])
IndexError: list index out of range
$

添加简单检查有助于:

$cat t.py
...
    for rows in readusers:
        if len(rows)==2:
          users[rows[0]] = float(rows[1])
...
$python t.py
{'ivar': 10.0, 'bart': 10.0, 'siem': 10.0}
$

相关问题 更多 >