экспорт вывода в CSV-файл? - PullRequest
0 голосов
/ 09 мая 2018

У меня есть код для получения твита от его идентификатора, и я хочу экспортировать вывод в файл CSV. Код как ниже:

import tweepy
from tweepy import OAuthHandler
import csv 

consumer_key = '???'
consumer_secret = '???'
access_token = '???'
access_secret = '???'


auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)

api = tweepy.API(auth)


tweet = api.get_status(/id of tweet/)
print(tweet.text)
print(tweet.id)
print(tweet.created_at)

Я попробовал этот код, я получил его из другого кода, и он не работает:

with open('tweet1212.csv', 'w',encoding='utf-8') as csvfile:
        fieldnames = ['info.']
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
        writer.writeheader()
        writer.writerows(tweet)

Меня достает:

TypeError: 'Status' object is not iterable

Пожалуйста, помоги мне, если сможешь.

1 Ответ

0 голосов
/ 10 мая 2018

Ошибка говорит вам о том, что было не так - вы не можете просто передать объект Status в Writerows.

Быстрый взгляд на документ показывает, что для writerow требуется словарь.

Итак, два пути:

with open('tweet1212.csv', 'w',encoding='utf-8') as csvfile:
    fieldnames = ['info.']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    row = str(tweet.text) + str(tweet.id) + str(tweet.created_at)
    writer.writerow({'info.':row})

Или вы можете изменить имена полей на fieldnames=['text', 'id','created_at'] и сделать что-то вроде write.writerow({'text':tweet.text, 'id':tweet.id, 'created_at':tweet.created_at})

Таким образом, вы будетезапись строки только каждый раз, когда вы открываете файл, поэтому я подозреваю, что вы хотите добавить a вместо записи w:

with open('tweet1212.csv', 'a',encoding='utf-8') as csvfile:

Дайте мне знать, если это работает/ Вам нужна дополнительная помощь!

PS Я настоятельно рекомендую использовать pandas вместо csv для создания CSV-файлов - манипулирование кадрами данных намного проще!

Edit1

Предположим, что вы получили новый твит, запустив эту функцию:

tweet = api.get_status(/id of tweet/)

затем вы можете создать список твитов, используя что-то вроде следующего:

allTweets=[];
allIDs=[1234, 1235, 1236] # a lits of id of tweets that you want to get

with open('tweet1212.csv', 'a',encoding='utf-8') as csvfile:
    fieldnames = ['info.']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    for ID in allIDs:
        tweet = api.get_status(/id of tweet/)
        row = str(tweet.text) + str(tweet.id) + str(tweet.created_at)
        writer.writerow({'info.':row})

Дайте мне знать, если это работает!

...