2015-10-28 40 views
2

我知道這個問題已被問了幾次,但我已經嘗試了一切,似乎沒有任何工作我認爲我只需要第二組眼睛告訴我我做錯了什麼。寫入CSV中的不同列

我現在能寫我的CSV文件中像這樣

Row 1: Date 
Row 2: User_Name 
Row 3: Text 
etc.. 

但我想寫信給它像

Column1 Column2  Column3 
Date  User_Name  Text 

這裏是我的代碼

writer = csv.writer(open('test.csv', 'ab')) 
r = api.request('search/tweets', {'q':'pizza'}) 
for item in r: 
    screen_name = item['user']['screen_name'].encode('utf-8') 
    created_at = item['created_at'].encode('utf-8') 
    tweet = item['text'].encode('utf-8') 
    writer.writerows([screen_name, created_at, tweet]) 

我此代碼的電流輸出如下所示

d,o,m,i,n,o,s 
W,e,d, ,O,c,t, ,2,8, ,1,9,:,0,1,:,1,6, ,+,0,0,0,0, ,2,0,1,5 
@,G,i,a,n,k,i,5,8,9,6, ,T,r,y,i,n,g, ,t,o, ,o,r,d,e,r,?, ,L,e,a,r,n, ,h,o,w, ,t,o, ,e,n,a,b,l,e, ,T,w,e,e,t, ,O,r,d,e,r,i,n,g, ,i,n, ,y,o,u,r, ,P,i,z,z,a, ,P,r,o,f,i,l,e,:, ,h,t,t,p,s,:,/,/,t,.,c,o,/,z,U,m,E,c,Y,M,6,5,2, ,[,1,5,:,0,1,:,2,2, ,E,D,T,] 
K,_,_,B,o,o,k,s 

任何幫助是極大的讚賞

+0

貌似'api.request'是返回一個字符串,這意味着'r'中的項目是單個字符。嘗試在r上調用'.split'獲取所有單詞的列表 –

+0

您在這裏混合了兩個任務:*獲取* api.request行並*將它們寫入CSV。對於這個名字的問題,定義行數據(提示:以'csv.writer.writerows'在docs/examples中使用的格式)。 – cphlewis

回答

2

你需要或者調用.writerow()內循環:

for item in r: 
    screen_name = item['user']['screen_name'].encode('utf-8') 
    created_at = item['created_at'].encode('utf-8') 
    tweet = item['text'].encode('utf-8') 
    writer.writerow([screen_name, created_at, tweet]) 

或者,在列出的清單收集行和調用後.writerows()

rows = [] 
for item in r: 
    screen_name = item['user']['screen_name'].encode('utf-8') 
    created_at = item['created_at'].encode('utf-8') 
    tweet = item['text'].encode('utf-8')  
    rows.append([screen_name, created_at, tweet]) 

writer.writerows(rows) 
+0

ahh dang它完全錯過了行與行!謝謝 – user3271518

2

writerows,顧名思義,是用來寫多行。看起來您想要按item寫一行,所以請改用writerow([screen_name, created_at, tweeet])

就這樣,writerows正在接收每個項目三個字符串的序列。 writerows需要一系列序列,併爲主序列中的每個序列(在本例中爲一個字符串)寫入一行。因此,字符串中的每個字符都被寫入一個單獨的列。

+0

再次,你的答案是完全正確的錯過行vs行!謝謝你的幫助 – user3271518