首页 > 解决方案 > 如何将txt文件中具有相同键、不同值的多个字典导出到csv

问题描述

我有一个 txt 文件中的 {n} 个字典列表。每行的每个字典,如下图所示,我希望以 csv 格式导出,每列显示每个键。

{'a':'1','b':'2','c':'3'}
{'a':'4','b':'5','c':'6'}
{'a':'7','b':'8','c':'9'}
{'a':'10','b':'11','c':'12'}
...
{'a':'x','b':'y','c':'z'}

我想要如下 {n} 行的 csv 输出和索引

    a   b   c
0   1   2   3
1   4   5   6
2   7   8   9
... ... ... ...
n   x   y   z

标签: pythondictionary

解决方案


您可以使用ast.literal_eval( doc ) 从文本文件中加载数据。

输入文件的内容file.txt

{'a':'1','b':'2','c':'3'}
{'a':'4','b':'5','c':'6'}
{'a':'7','b':'8','c':'9'}
{'a':'10','b':'11','c':'12'}
{'a':'x','b':'y','c':'z'}

您可以使用此脚本来加载数据和输入file.csv

import csv
from ast import literal_eval

with open('file.txt', 'r') as f_in:
    lst = [literal_eval(line) for line in f_in if line.strip()]

with open('file.csv', 'w', newline='') as csvfile:
    fieldnames = ['a', 'b', 'c']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    writer.writeheader()
    writer.writerows(lst)

file.csv会变成:

a,b,c
1,2,3
4,5,6
7,8,9
10,11,12
x,y,z

将文件导入 LibreOffice:

在此处输入图像描述


推荐阅读