使用open与csv.DictReader读取分号分隔csv文件结果异常
错误原因
- 未指定字段分隔符:
csv模块默认使用逗号作为字段分隔符,你的文件采用分号分隔,导致每行内容没有被拆分,整行被识别为单个字段,因此出现{"a;A": "b;B"}的错误结果。 - DictReader用法不符合数据结构:
csv.DictReader默认将文件第一行作为表头键,后续每一行对应一条以表头为键的记录,你通过list(dctreader)[0]仅取了第一条数据记录,没有遍历全部370行内容,自然只能得到2个条目。
解决方案
无需引入pandas,直接使用Python标准库csv.reader,指定分号为分隔符遍历所有行构造字典即可,性能满足要求。
代码示例
兼容版本(可处理空行、异常行)
import os import csv strpath = r"C:\Project Folder" filename = "to_dictionary.csv" os.chdir(strpath) finaldct = {} # 用with上下文管理器自动管理文件资源,无需手动关闭 with open(filename, mode="r", encoding="windows-1250") as f: # 指定分号为字段分隔符 reader = csv.reader(f, delimiter=";") for row in reader: # 仅处理至少包含两列的有效行 if len(row) >= 2: finaldct[row[0]] = row[1] print(finaldct)
简洁版本(确认所有行均为标准「键;值」格式无空行时使用)
import os import csv strpath = r"C:\Project Folder" filename = "to_dictionary.csv" os.chdir(strpath) with open(filename, mode="r", encoding="windows-1250") as f: finaldct = dict(csv.reader(f, delimiter=";")) print(finaldct)
内容的提问来源于stack exchange,提问作者Soren V. Raben
相关产品推荐
相关产品推荐

