[英]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.