如何将txt文件中具有相同键,不同值的多个词典导出到csv

时间:2019-07-28 00:11:13

标签: python dictionary

我在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

2 个答案:

答案 0 :(得分:0)

x =[{'a':'1','b':'2','c':'3'},
{'a':'4','b':'5','c':'6'},
{'a':'7','b':'8','c':'9'},
{'a':'10','b':'11','c':'12'}]
n = len(x)
keys = list(x[0].keys())
newdict=dict()
for m in keys:
    newdict[m]=[]
    for i in range(n):
        newdict[m].append(x[i][m])
newdict

输出为

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

或者您可以使用pandas.concat,它用于将DataFrames与相同的列合并。

import pandas as pd
x =[{'a':'1','b':'2','c':'3'},
{'a':'4','b':'5','c':'6'},
{'a':'7','b':'8','c':'9'},
{'a':'10','b':'11','c':'12'}]

xpd=[]
for i in x:
    df=pd.DataFrame(i, index=[0])
    xpd.append(df) 
pd.concat(xpd, ignore_index=True)

答案 1 :(得分:0)

您可以使用ast.literal_evaldoc)从文本文件加载数据。

包含输入文件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:

enter image description here