2016-01-27 49 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