2016-01-27 50 views
0

我有一个存储的Facebook状态数据类型的字典列表(图API):贮藏Python字典数据到CSV

len(test_statuses) 
3 


test_statuses 
[{u'comments': {u'data': [{u'created_time': u'2016-01-27T10:47:30+0000', 
u'from': {u'id': u'1755814687982070', u'name': u'Fadi Cool Panther'}, 
u'id': u'447173898813933_447182555479734', 
u'message': u'Sidra Abrar'}], 
u'paging': {u'cursors': {u'after': u'WTI5dGJXVnVkRjlqZFhKemIzSTZORFEzTVRneU5UVTFORGM1TnpNME9qRTBOVE00T1RFMk5UQT0=', 
u'before': u'WTI5dGJXVnVkRjlqZFhKemIzSTZORFEzTVRneU5UVTFORGM1TnpNME9qRTBOVE00T1RFMk5UQT0='}}, 
u'summary': {u'can_comment': False, 
u'order': u'ranked', 
u'total_count': 1}}, 
u'created_time': u'2016-01-27T10:16:56+0000', 
u'id': u'5842136044_10153381090881045', 
u'likes': {u'data': [{u'id': u'729038357232696'}, 
{u'id': u'547422955417520'}, 
{u'id': u'422351987958296'}, 
{u'id': u'536057309903473'}, 
{u'id': u'206846772999449'}, 
{u'id': u'1671329739783719'}, 
{u'id': u'991398107599340'}, 
{u'id': u'208751836138231'}, 
{u'id': u'491047841097510'}, 
{u'id': u'664580270350825'}], 
u'paging': {u'cursors': {u'after': u'NjY0NTgwMjcwMzUwODI1', 
u'before': u'NzI5MDM4MzU3MjMyNjk2'}, 
u'next': u'https://graph.facebook.com/v2.5/5842136044_10153381090881045/likes?limit=10&summary=true&access_token=521971961312518|121ca7ef750debf4c51d1388cf25ead4&after=NjY0NTgwMjcwMzUwODI1'}, 
u'summary': {u'can_like': False, u'has_liked': False, u'total_count': 13}}, 
u'link': u'https://www.facebook.com/ukbhangrasongs/videos/447173898813933/', 
u'message': u'Track : Ik Waar (Official Music Video)\nSinger : Falak shabir ft DJ Shadow\nMusic by Dj Shadow\nFor more : UK Bhangra Songs', 
u'shares': {u'count': 7}, 
u'type': u'video'}, 
{u'comments': {u'data': [], 
u'summary': {u'can_comment': False, 
u'order': u'chronological', 
u'total_count': 0}}, 
u'created_time': u'2016-01-27T06:15:40+0000', 
u'id': u'5842136044_10153380831261045', 
u'likes': {u'data': [], 
u'summary': {u'can_like': False, u'has_liked': False, u'total_count': 0}}, 
u'message': u'I want to work with you. tracks for flicks', 
u'type': u'status'}] 

我需要提取每个状态的文字和每个注释下的状态的文本,我可以通过附加到单独列出,例如,:

status_text = [] 
comment_text = [] 

for s in test_statuses: 
try: 
    status_text.append(s['message']) 
    for c in s['comments']['data']: 
     comment_text.append(c['message']) 
except: 
    continue 

这给了我不同的长度len(status_text) = 2len(comment_text) = 49的两份名单做。

不幸的是,这是一种处理数据的可怕方式,因为我无法追踪哪些评论属于什么状态。理想情况下,我想将其作为树结构存储并导出到CVS文件中,但我无法弄清楚如何去做。

可能的数据ACV数据结构:

Text  is_comment 

status1     0 
status2     0 
statusN     0 
comment1   status1 
comment2   status1 
commentN   statusN 

回答

2

为什么你需要这是一个CSV?它已经结构化并准备好作为JSON被持久化。

如果您确实需要CSV提供的表格方法,那么您必须对其进行非规范化处理,或者使用多个CSV表格以及从一个到另一个的引用(最好的方法是将数据放入一个SQL数据库,负责照顾你的关系)

也就是说,非规范化的方法是简单地将相同的状态文本保存到注释所在的每一行 - 即:将CSV行记录在最内层循环中用你的方法:

import csv 
status_text = [] 
comment_text = [] 
writer = csv.writer(open("mycsv.csv", "wt")) 
for s in test_statuses: 

    test_messages.append(s['message']) 
    for c in s['comments']['data']: 
     test_comments.append(c['message']) 
     writer.writerow((s['message'], c['message'])) 

请注意,你可能会写更好的状态id,并创建第二个表,其中id是关键(并将其放入数据库而不是各种CSV文件)的状态消息。然后,再一次,你可能更喜欢简单地保持JSON。如果您需要搜索功能,请使用支持JSON的数据库,例如MongoDB或PostgreSQL

+0

我想让cvs文件在R中执行进一步的分析。是否可以将状态文本和注释文本存储在同一行中,但是为评论添加一个额外的变量,其评论的状态为其值?我编辑了这个问题来显示我的意思是数据结构。所以,如果我有我想分析的其他变量,我只需要将另一行追加到.csv文件。 – Zlo