2013-06-12 15 views
0

我想用python創建一個csv。在每一行中,我都希望第一個單元格是一個提出問題的人,第二個單元格是回答問題的人,第三個單元是回答問題的時間。我只是創建一個簡單的列表,列表中的每個元素都是一個細胞,這意味着名單如下:爲什麼當我寫入CSV時間隔?

Jan Janet 3/4/05 
Jason John 3/6/05 
... 

但我的輸出有每單元一個字母,而不是一個字。

繼承人是我的代碼:

import csv 
import collections 
from collections import defaultdict 

edgelist = [] 

csv.field_size_limit(1600000) 

f = open('/Users/samuelfinegold/Documents/harvard/edXresearch/snaCreationFiles/time_series/time_series.csv','rU') 
reader = csv.DictReader(f, delimiter=',') 

    if line['types'] == 'Question': 
     #print 'T' 
     source = line['author_id'] 
    else: 
     edgelist.append(source + " " + line['author_id'] + " " + line['time']) 

with open("/Users/samuelfinegold/documents/harvard/edxresearch/snacreationfiles/time_series/connections_times_series_ex.csv", "w") as the_file: 
    csv.register_dialect("custom", delimiter=",", skipinitialspace=True) 
    writer = csv.writer(the_file, dialect="custom") 
    writer.writerows(edgelist)  

the_file.close()   
f.close() 

如何獲得每個細胞,而不是一個字母一個字一個CSV?

回答

1

edgelist應該是列表(或元組列表)的列表,而不是列表的字符串。試着改變你的edgelist.append()線以下:

edgelist.append([source, line['author_id'], line['time']]) 

您目前得到的每個字母在列,因爲當你寫一行到一個CSV文件它期待一個迭代,每個元素都是一列。如果您嘗試將一個字符串作爲一行寫入,則該字符串中的每個字母將被解釋爲一個單獨的列。這意味着每行都應該是一個列表,因此writer.writerows()需要列表。

+0

會嘗試,現在 – goldisfine

0

.writerows()期望具有序列列表;列表或元組的列表,真的,但字符串也是序列。

追加元組edgelist

edgelist.append((source + " " + line['author_id'] + " " + line['time'],)) 

因爲字符串是序列太,單個字符序列,你看你Jan Janet 3/4/05輸入被分成不同的細胞。

你什麼真的想要的,是爲csv雖然分開你的價值;如果你想有一個空格分隔列表,使用:

edgelist.append((source, line['author_id'], line['time'],)) 

,並告訴csv.writer()使用空格作爲分隔符:

csv.register_dialect("custom", delimiter=" ", skipinitialspace=True) 
+0

這將使整個字符串,比如'揚珍妮特·3/4/05'到一個單元格中。 –

+0

@ F.J:當然​​,但這是OP做* *的事情。不是最好的方式,但仍然。 –

相關問題