Python:将包含行标题的文本文件读入新的CSV / Excel

时间:2017-10-20 19:13:56

标签: python excel csv

我有一个文本文件要输出到新的.csv文件中。列标题与数据内联,我无法弄清楚如何处理文件。我是一个蟒蛇新手。

输入文件格式为:
{“第1列名称”:“第1列值”,“第2列名称”:“第2列值”,“第3列名称”:“第3列值”,“第4列名称”:“第4列值”,“第5列名称“:”第5列值“}

我想要的输出文件格式是:
第1行中的列标题 第2行及以后的逗号分隔值

有时值可能为空,因此我需要考虑到这一点,因此值不会转移到错误的列标题。

提前致谢!

1 个答案:

答案 0 :(得分:0)

您的输入文件格式不是100%清除。看起来它是JSON,我假设每行有一个JSON。我进一步假设单次输入之间没有换行符。

您的问题最好分为两部分。

1。读取输入文件 - 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这里将是dict的列表,输出:

[{'header2': 'value1.2', 'header1': 'value1.1'}, {'header2': 'value2.2', 'header1': 'value2.1'}]

2。从dict&#39>

列表中编写输出文件

2a上。确定字段列表

除非您已经有固定的字段列表,否则您可能需要先确定该列表。

您可以查看每个字典,获取其密钥并构建一个唯一的列表,如下所示:

from functools import reduce

all_keys = sorted(reduce(lambda acc, item: acc | set(item.keys()), data, set()))

print(all_keys)

此处我们从空set()开始(右侧),这将是第一个accdata中的每个字典将变为item。我们正在使用|运算符添加keys()acc,返回值将成为下一轮acc(或最终返回值)。由于我们使用套装,因此不会重复。 sorted只是给它一个最后的触摸,但是是可选的。

输出:

['header1', 'header2']

2B。编写CSV

嗯,有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