【发布时间】:2014-08-01 01:28:55
【问题描述】:
我正在使用 Tweepy 流式传输推文,并希望以 CSV 格式记录它们,以便我可以使用它们或稍后将它们加载到数据库中。 请记住,我是一个菜鸟,但我确实意识到有多种方法可以处理这个问题(非常欢迎提出建议)。
长话短说,我需要将多个 Python 字典转换并附加到 CSV 文件中。 我已经进行了研究 (How do I write a Python dictionary to a csv file?) 并尝试使用 DictWriter 和 writer 方法进行此操作。
但是,还有一些事情需要完成:
1) 仅将密钥作为标题写入一次。
2) 随着新推文的流式传输,需要在不覆盖之前行的情况下附加值。
3) 如果 value 缺少记录 NULL。
4) 跳过/修复 ascii 编解码器错误。
这是我想要最终得到的格式(每个值都在其单独的单元格中):
Header1_Key_1 Header2_Key_2 Header3_Key_3...
Row1_Value_1 Row1_Value_2 Row1_Value_3...
Row2_Value_1 Row2_Value_2 Row2_Value_3...
Row3_Value_1 Row3_Value_2 Row3_Value_3...
Row4_Value_1 Row4_Value_2 Row4_Value_3...
这是我的代码:
from tweepy.streaming import StreamListener
from tweepy import OAuthHandler
from tweepy import Stream
import csv
import json
consumer_key="XXXX"
consumer_secret="XXXX"
access_token="XXXX"
access_token_secret="XXXX"
class StdOutListener(StreamListener):
def on_data(self, data):
json_data = json.loads(data)
data_header = json_data.keys()
data_row = json_data.values()
try:
with open('csv_tweet3.csv', 'wb') as f:
w = csv.DictWriter(f, data_header)
w.writeheader(data_header)
w.writerow(json_data)
except BaseException, e:
print 'Something is wrong', str(e)
return True
def on_error(self, status):
print status
if __name__ == '__main__':
l = StdOutListener()
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
stream = Stream(auth, l)
stream.filter(track=['world cup'])
提前谢谢你!
【问题讨论】:
-
你是说你拥有的东西没有用吗?此外,您始终可以将 json 转储到文件中,每行一个条目...
-
它不工作。是的,你可以,但我正在尝试使用 csv 格式。
-
当您说它“不起作用”时,是否有任何特定的东西似乎不起作用。例如,有例外吗?
-
这似乎是一种蛮力方法,但为什么不自己保留行的标签呢?例如:
headers = []values = []for key, value in json.iteritems():`headers.append(key)``values.append(values)`````csv.writerow(headers)csv.writerow(values) -
看起来不错。完全同意。
标签: python csv dictionary tweepy