gpt4 book ai didi

python - 将 csv 仅一列转换为字典

转载 作者:行者123 更新时间:2023-12-01 09:10:24 26 4
gpt4 key购买 nike

这个方向已经存在问题,但就我而言,我遇到以下问题:

列别名包含字典。如果我使用 csv 阅读器,我会得到字符串。

我已经用ast eval解决了这个问题,但是速度很慢,而且消耗大量资源。

由于编码问题,替代的 json.loads 不起作用。

解决这个问题的一些想法?

CSV 文件:

id;name;partei;term;wikidata;alias
2a24b32c-8f68-4a5c-bfb4-392262e15a78;Adolf Freiherr Spies von Büllesheim;CDU;10;Q361600;{}
9aaa1167-a566-4911-ac60-ab987b6dbd6a;Adolf Herkenrath;CDU;10;Q362100;{}
c371060d-ced3-4dc6-bf0e-48acd83f8d1d;Adolf Müller;CDU;10;Q363453;{'nl': ['Adolf Muller']}
41cf84b8-a02e-42f1-a70a-c0a613e6c8ad;Adolf Müller-Emmert;SPD;10;Q363451;{'de': ['Müller-Emmert'], 'nl': ['Adolf Muller-Emmert']}
15a7fe06-8007-4ff0-9250-dc7917711b54;Adolf Roth;CDU;10;Q363697;{}

代码:

with open(PATH_CSV+'mdb_file_2123.csv', "r", encoding="utf8") as csv8:
csv_reader = csv.DictReader(csv8, delimiter=';')
for row in csv_reader:

if not (ast.literal_eval(row['alias'])):
pass

elif (ast.literal_eval(row['alias'])):
known_as_list = list()

for values in ast.literal_eval(row['alias']).values():
for aliases in values:
known_as_list.append(aliases)

它运行良好,但速度很慢。

最佳答案

ast 库消耗大量内存(请参阅 this link ),我建议在将简单的字典格式字符串转换为 python 字典时避免使用它。相反,我们可以尝试 python 的内置 eval 函数来克服由于导入模块而导致的延迟。正如一些讨论所表明的,在处理敏感字符串时,eval 是极其危险的。示例:eval('os.system("rm -rf/")')。但是,如果我们非常确定 csv 内容不会携带如此敏感的命令,我们就可以放心地使用 eval

with open('input.csv', encoding='utf-8') as fd:
csv_reader = csv.DictReader(fd, delimiter=';')

for row in csv_reader:
# Convert dictionary in string format to python format
row['alias'] = eval(row['alias'])

# Filter empty dictionaries
if not bool(row['alias']):
continue

known_as_list = [aliases for values in row['alias'].values() for aliases in values]

print(known_as_list)

输出

C:\Python34\python.exe c:\so\51712444\eval_demo.py
['Adolf Muller']
['Müller-Emmert', 'Adolf Muller-Emmert']

关于python - 将 csv 仅一列转换为字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51706302/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com