如何将txt文件中具有相同键、不同值的多个字典导出到cs

2024-03-28 15:39:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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

Tags: 文件csvtxt列表字典格式词典
2条回答
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)

您可以使用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

相关问题 更多 >