簡體   English   中英

Python:將具有行標題的文本文件讀取到新的CSV / Excel中

[英]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。 我進一步假設單個條目之間沒有換行符。

您的問題最好分為兩部分。

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將是字典的列表,輸出:

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

2.從字典列表中寫入輸出文件

2a。 確定字段列表

除非您已有固定的字段列表,否則可能需要首先確定該列表。

您可以仔細閱讀每個字典,獲取其鍵並為其建立唯一列表,如下所示:

from functools import reduce

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

print(all_keys)

在這里,我們從一個空的set() (在右側)開始,這將是第一個accdata每個字典都將成為item 我們正在向acc添加(使用|運算符) keys() ,返回值將成為下一輪的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM