2014-07-08 72 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