2017-06-06 47 views
1

美好的一天,python csv從巨型循環寫入

我從api收集數據,並試圖將其保存爲csv。那我接受它的格式是:

for title in titles: 
    print(title.name) 
    for data in title.data: 
     print(data) 

Title1 
data1 
data2 
data3 
Title2 
data4 
data5 
data6 

等,(上第一,底部最後,從一個巨大的循環)

我想打一個CSV,使它看起來像

Title1 Title2 
data1 data4 
data2 data5 
data3 data6 

有很多數據,所以我不能將它保存爲列表並壓縮它。似乎它應該是一個簡單的任務,但我找不到解決方案。

+0

是數據編號還是某種形式不同於標題?像標題總是字和數據總是整數或浮點數/ – Jacobr365

+0

你應該看看csv模塊:https://docs.python.org/3/library/csv.html –

+0

@ Jacobr365標題和數據都是字符串包含字母和數字。 – shounen

回答

0

繼馬騰法布爾的建議,你可以讓你的數據接收功能爲數據發生器:

import pyexce as p 

... 

def data_gen(): 
    for title in titles: # put your data recicving api code here 
     yield [title.name] + title.data 


p.save_as(array=data_gen(), dest_file_name='result.csv') 

那麼你將有數據result.csv爲:

Title1,data1,data2,data3 
Title2,data4,data5,data6 

然後就可以轉它後來:

>>> s=p.get_sheet(file_name='result.csv') 
>>> s 
result.csv: 
+--------+-------+-------+-------+ 
| Title1 | data1 | data2 | data3 | 
+--------+-------+-------+-------+ 
| Title2 | data4 | data5 | data6 | 
+--------+-------+-------+-------+ 
>>> s.transpose() 
>>> s 
result.csv: 
+--------+--------+ 
| Title1 | Title2 | 
+--------+--------+ 
| data1 | data4 | 
+--------+--------+ 
| data2 | data5 | 
+--------+--------+ 
| data3 | data6 | 
+--------+--------+ 
>>> s.save_as('perferct_result.csv') 

或者,您可以馬上消耗,而不需要t轉交它:

>>> s=p.get_sheet(file_name='result.csv') 
>>> s.name_rows_by_column(0) 
>>> s 
result.csv: 
+--------+-------+-------+-------+ 
| Title1 | data1 | data2 | data3 | 
+--------+-------+-------+-------+ 
| Title2 | data4 | data5 | data6 | 
+--------+-------+-------+-------+ 
>>> s.to_dict() 
OrderedDict([(u'Title1', [u'data1', u'data2', u'data3']), (u'Title2', [u'data4', u'data5', u'data6'])])