首页 > 解决方案 > 'open' 和 'csv.DictReader' 无法正确读取文件

问题描述

我有一个在 windows-1250 中编码的简单 .csv 文件。具有键值对的两列,用分号分隔。我想根据这些数据创建一个字典。我使用了这个解决方案:How to read a .csv file into a dictionary in Python。下面的代码:

import os
import csv

strpath = r"C:\Project Folder"

filename = "to_dictionary.csv"

os.chdir(strpath)

test_csv = open(filename, mode="r", encoding="windows-1250")

dctreader = csv.DictReader(test_csv)

ordereddct = list(dctreader)[0]

finaldct = dict(ordereddct)

print(finaldct)

首先,这个文件有 370 行,但我只收到两个. 其次,Python 将整个第一行作为键读取,将下一行作为值读取(然后像我提到的那样停止)。

# source data
# a;A
# b;B
# c;C
# ... up to 370 rows

# what I need (example; there should be 368 pairs more of course)
finaldct = {"a": "A", "b": "B"}

# what I receive
finaldct = {"a;A": "b;B"}

我不知道为什么会发生这种情况,也找不到任何可行的解决方案。

注意:我想避免使用 pandas,因为在这种情况下它似乎工作得更慢。

标签: pythoncsvdictionary

解决方案


文件有 370 行,但我只收到两行

这可能是由换行问题引起的(它们在系统之间确实不同,如果您想了解更多信息,请参阅换行维基百科条目)。csv模块文档建议newline=''在您的情况下使用 ie

test_csv = open(filename, newline='', mode="r", encoding="windows-1250")

推荐阅读