2014-07-08 71 views
0

我有一個twitter日誌數據,我必須對文件進行排序,以顯示 每個用戶轉推的推文排名。Python:對文件進行排序

這是代碼。

import codecs 

with codecs.open('hoge_qdata.tsv','r', 'utf-8') as tweets: 
    tweet_list = tweets.readlines() 

tweet_list.pop(0) 

facul={} 
for t in tweet_list: 
    t=t.split('\t') 
    if not t[0] in facul: 
     facul[t[0]]=[] 
    facul[t[0]].append(t) 
    t[-2]= int(t[-2]) 

def cmp_retweet(a,b): 
    if a[-2]<b[-2]: 
     return 1 
    if a[-2]>b[-2]: 
     return -1 
    return 0 

for f in sorted(facul.keys()): 
    facul[f].sort(cmp = cmp_retweet) 
    print ('[%s]' %(f)) 
    for t in facul[f][:5]: 
     print ('%d:%s:%s' %(t[-2], t[2], t[-1].strip())) 

我幾乎得到了正確的答案,但我必須讓這個不會 顯示未轉推鳴叫..

這就是答案我應該得到(這僅僅是一個部分我有一個麻煩):

[jin_nkzw] 
325:46936947935035392:RT @shimshamshimmy: SFCの學生と教職員の方へ、安否確認に協力してください。SFC-SFSで伝えてください。 https://vu8.sfc.keio.ac.jp/sfc-sfs/ 

,但是這是我得到的...

[jin_nkzw] 
325:46936947935035392:RT @shimshamshimmy: SFCの學生と教職員の方へ、安否確認に協力してください。SFC-SFSで伝えてください。 https://vu8.sfc.keio.ac.jp/sfc-sfs/ 
0:8356641661:麴町のNICTで會議。ビルの目の前に、今朝のテレビでやってた「ふゆざくら」が咲いていた。 
0:4979124091:@sfc_orf リンゴの木は會場俯瞰図(斷面)からタッチパネルが生えているということで、「斷面の觸覚」という名前が浮かびました。「斷面の觸感」と言葉が近すぎて誤植と思われますかね〜 
0:11422290558:いまになって、@who_meさんをフォローしていなかったことに気づく 
0:7940726154:秋葉原で1000円程度で手配できるおいしいお弁當といったら何でしょう? 

的格式是.. 轉推的次數:編號:內容

我無法計算出如何抹掉這些推文。

+0

你就不能檢查,如果'T [ -2] == 0'打印之前? – mgilson

回答

0

我會以爲這會做的伎倆:

for t in tweet_list: 
    t=t.split('\t') 
    t[-2]= int(t[-2]) # Move this up here. 
    if t[-2] <= 0:  # Check the retweet value. 
     continue  # If it's 0 or less, skip this tweet completely. 
    if not t[0] in facul: 
     facul[t[0]]=[] 
    facul[t[0]].append(t) 

或者,如果你想存儲的微博,而不是將它們打印:

for t in facul[f][:5]: 
     if t[-2] > 0: 
      print ('%d:%s:%s' %(t[-2], t[2], t[-1].strip())) 
+0

omg!它正在工作!非常感謝!! – user3816980

+0

一個有用的提示:使用['collections.defaultdict'](https://docs.python.org/2/library/collections)而不是像'if not k in d:d [k] = []''這樣的構造。 HTML#collections.defaultdict)。 – Lynn

+0

不知何故我得到錯誤說 文件「kadai3-2.py」,第29行,在 print'%d:%s:%s'%(t [-2],t [2],t [-1 ] .encode('utf-8')。strip()) UnicodeDecodeError:'ascii'編解碼器無法解碼位置19中的字節0xe4:序號不在範圍內(128) 發生了什麼?應該怎麼做才能解決這個問題? – user3816980