写入CSV中的不同列

时间:2015-10-28 19:07:11

标签: python 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

非常感谢任何帮助

2 个答案:

答案 0 :(得分:2)

顾名思义,

writerows用于写入多行。看起来您希望每item写一行,因此请改用writerow([screen_name, created_at, tweeet])

实际上,writerows每个项目接收三个字符串的序列。 writerows需要一系列序列,并为主序列中的每个序列(在本例中为字符串)写入一行。因此,字符串中的每个字符都会写入一个单独的列。

答案 1 :(得分: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)