2016-09-27 81 views
0

Output CSv file我目前正在嘗試使用python將文件中的數據放入csv文件。 我的數據如下所示:使用dictwriter並使用python將非結構化數據寫入csv文件

data_list{} = [{'row': '0', 't0': '8.69E-005', 'elems': ' 4 96 187 ', 'Tspan': '5E-006', 'NP': '625','wave0': '123.65 333.56 3333.78 567.89 345678.77 34E-08'}] 

我的輸出應該是這樣的:

row t0  elems Tspan NP wave0 
0 8.69E-005 4 5E-006 625 123.65 
       96    333.56 
       187    3333.78 
            567.89 
            345678.77 
            34E-08 

首先是頭部,然後將其下的值。除了elems和wave0之外,我在獲取標題部分和所有行部分方面取得了成功。

Python代碼:

with open('cc.csv','w', newline='') as out_file: 
    writer = csv.DictWriter(out_file, fieldnames=data_list[0].keys()) 
    writer.writeheader() 
    for data in data_list: 
      writer.writerow(data) 
+0

您輸出的格式絕對不是CSV格式!你爲什麼要爲此使用csv模塊? –

+0

我正在把數據放入cc.csv文件。我能寫幾列的數據,但對於elem和wave0,我希望數據根據分隔符空間進入下一行。 –

+0

如果data_list中有兩個元素,輸出結果如何? –

回答

0

看起來你是你data_list變量裏面的字典之後。爲了得到你想要的輸出,你將需要做的工作一點點:

你一個字典的名單:

data_list = [{'row': '0', 't0': '8.69E-005', 'elems': ' 4 96 187 ', 'Tspan': '5E-006', 'NP': '625','wave0': '123.65 333.56 3333.78 567.89 345678.77 34E-08'}] 

首先,你需要定義輸出列:

output_cols = ['row', 't0', 'elems', 'Tspan', 'NP', 'wave0'] 

然後,你需要從字典的values,隨後*zip*創建列表所有這些名單在一起:

# Python2 
from itertools import izip_longest 
import csv 

data = [data_list[0].get(x).strip().split(" ") for x in output_cols] 
data = izip_longest(*data) 
with open('somefile.csv','w') as outfile: 
    file_writer = csv.writer(outfile, delimiter="\t", lineterminator="\n") 
    file_writer.writerow(output_cols) 
    file_writer.writerows(data) 

如果您使用python3,則from itertools import izip_longest應替換爲from itertools import zip_longest

請注意,答案假設您的所有數據都是第一個字典(data_list[0])。如果您的實際列表比這更長,請分享更多數據。的somefile.csv

內容:

row  t0  elems Tspan NP  wave0 
0  8.69E-005 4  5E-006 625  123.65 
       96      333.56 
       187     3333.78 
             567.89 
             345678.77 
             34E-08 

我希望這有助於。

+0

非常感謝。它的工作:) –

+0

somefile.csv是無效的CSV(RFC 4180) – Marichyasana

+0

我不知道我關注。你能否詳細說明一下? – Abdou

相關問題