我的脚本压缩存储在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已损坏。我检查了我认为与其他文件相比的所有不一致,但没有找到。这就是我在这里询问剧本的原因。
答案 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。
谢谢你们。