2015-10-28 3 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' является возвращает строку, которая означает, что 'item in r' являются отдельными символами. попробуйте вызвать '.split' на r, чтобы получить список всех отдельных слов. –

+0

Здесь вы смешиваете две задачи: * получение * строк с api.request и * запись * их в CSV. Для проблемы с этим именем определите данные строки (подсказка: в формате, который 'csv.writer.writerows' использует в документах/примерах). – 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

Опять ваш ответ - это абсолютно правильно пропущенная строка против строк! спасибо за вашу помощь – user3271518

Смежные вопросы