IndexError:在从2列csv编写dict时列出索引超出范围

时间:2016-10-17 09:04:56

标签: python

我的脚本压缩存储在csv中的数字会将数字从csv中转换为dict,如下所示:

fide_rating_file = fide_csv_rating_file.read()
fide_rating_file = fide_rating_file.split("\n")
fide_rating_file2 = [f for f in fide_rating_file if len(f) > 0]
fide_rating_file3 = [f.split(",") for f in fide_rating_file2]
fide_ratings = {f[0]: f[1] for f in fide_rating_file3}

这可能不是使用csv的pythonic方式(欢迎提出建议),我成功地在数十个csv文件上运行脚本。现在我得到一个追溯告诉我:

File "...script.py", line 76, in script
fide_ratings = {f[0]: f[1] for f in fide_rating_file3}
File "...script.py", line 76, in <dictcomp>
fide_ratings = {f[0]: f[1] for f in fide_rating_file3}
IndexError: list index out of range

csv看起来像这样(这只是一个摘录,在这里发布的时间太长了):

1701991,2383
1407589,2188
1401815,2451
1411802,1913
1406248,2068
504599,2134
2252465,2099

它在其他文件上运行没有错误的事实表明这个特定的csv已损坏。我检查了我认为与其他文件相比的所有不一致,但没有找到。这就是我在这里询问剧本的原因。

2 个答案:

答案 0 :(得分:0)

您只获得一个包含至少两个iff项的子列表,每行都有一个逗号

fide_rating_file3 = [f.split(",") for f in fide_rating_file2]
#                    ^^^^^^^^^^^^

在分割或清除预处理阶段中没有逗号的行之前,您可以测试是否存在逗号:

fide_rating_file = [f.strip().split(",") for f in fide_csv_rating_file if ',' in f]
fide_ratings = {f[0]: f[1] for f in fide_rating_file}

另一方面,如果您实际使用标准库中的csv模块来解析文件内容,那会更好。

答案 1 :(得分:0)

根据每个人的建议我使用标准库csv模块

dict(csv.reader(fide_csv_rating_file))

以下错误回溯指向错误的行,只需使用正则表达式删除它们并找到并替换然后成功创建了dict。

谢谢你们。