[英]Python: Read text file with column headers in rows into new CSV/Excel
我有一个文本文件,我想输出到新的.csv文件中。 列标题与数据一致,我无法弄清楚如何处理文件。 我是python新手。
输入文件格式为:
{“第1列名称”:“第1列值”,“第2列名称”:“第2列值”,“第3列名称”:“第3列值”,“第4列名称”:“第4列值”,“第5列名称”:“第5列的值”}
我想要的输出文件格式是:
第1行中的列标题
第2行及其后的逗号分隔值
在某些情况下,某个值可能为空,所以我需要考虑到这一点,以使这些值不会移至错误的列标题。
提前致谢!
您输入的文件格式不是100%清除。 看起来是JSON,我假设每行有一个JSON。 我进一步假设单个条目之间没有换行符。
您的问题最好分为两部分。
假设数据为test.jl
(JSON行为jl):
{"header1": "value1.1", "header2": "value1.2"}
{"header1": "value2.1", "header2": "value2.2"}
然后,您可以逐行读取该文件,然后JSON解析每行:
import json
with open('test.jl') as input_f:
data = [json.loads(line) for line in input_f]
print(data)
这里的data
将是字典的列表,输出:
[{'header2': 'value1.2', 'header1': 'value1.1'}, {'header2': 'value2.2', 'header1': 'value2.1'}]
除非您已有固定的字段列表,否则可能需要首先确定该列表。
您可以仔细阅读每个字典,获取其键并为其建立唯一列表,如下所示:
from functools import reduce
all_keys = sorted(reduce(lambda acc, item: acc | set(item.keys()), data, set()))
print(all_keys)
在这里,我们从一个空的set()
(在右侧)开始,这将是第一个acc
, data
每个字典都将成为item
。 我们正在向acc
添加(使用|
运算符) keys()
,返回值将成为下一轮的acc
(或最终返回值)。 由于我们使用的是集合,因此不会重复。 sorted
只是给了它最后的印象,但是是可选的。
输出:
['header1', 'header2']
好吧,这里有DictWriter似乎很合适。
from csv import DictWriter
with open('test.csv', 'w') as csv_f:
csv_writer = DictWriter(csv_f, fieldnames=all_keys)
csv_writer.writeheader()
csv_writer.writerows(data)
在test.csv中输出:
header1,header2
value1.1,value1.2
value2.1,value2.2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.