2015-10-20 27 views
1

我有一個包含tweets集合的csv文件。我想將我的收藏分成每週分區。我所有的嘗試使用for循環的循環終止循環,python的作品,但它不想完成。有人可以向我解釋哪些是我的錯誤?我也試圖使while循環(而sortr =「」!)沒有運氣:如何將包含日期的列表拆分爲每週分區

import csv 
from datetime import datetime, timedelta 
from collections import defaultdict 

csv1 = open('../archiviato.csv', 'r') 
tabula=csv.reader(csv1) 
sortr= sorted(tabula) 
delta_days = 7 
c = 1 
months= defaultdict(list) 
weeke=defaultdict(list) 
weeks = [] 



for j in sortr: 
    tweetID = j[0] 
    timestamp = j[2] 
    times = datetime.strptime(timestamp, "%Y-%m-%d %H:%M:%S") 
    trmonth = times.month 
    trime = times.day 
    months[trmonth].append(j) 
    for i in sortr: 
     tweetID2 = i[0] 
     timestamp2 = i[2] 
     times2 = datetime.strptime(timestamp, "%Y-%m-%d %H:%M:%S") 
     trime2 = times2.day 
     if tweetID != tweetID2 and timedelta(trime2 - trime) <= timedelta(days = delta_days): 
      if weeks == []: 
       a = i,j 
       c = 1 
       weeks.append(a) 
       weeke=[c].append(a) 
       print tweetID 
       print tweetID2 
      else: 
       c = 1 
       weeke=[c].append(i) 
       print tweetID2 
     else: 
      c+=1 
      j = i 
      weeks = [] 
      continue 
+0

您可以指定代碼保留在哪裏嗎?如果它以錯誤結束,你可以請張貼痕跡嗎? – arodriguezdonaire

+0

我的代碼沒有完成一個錯誤,但有一個循環。它打印所有的tweetID號碼,然後當它們完成時它開始從頭開始打印另一個時間 – Lupanoide

+0

你將通過'sortr' n * n次,所以你將打印所有的ID n次 – arodriguezdonaire

回答

3

不能提供一個完整的解決方案,沒有CSV樣品和代碼段太大。但是,如果你想「用日期分割一個列表,分成每週分區」,我會推薦:

使用date.isocalendar(或datetime.isocalendar在你的情況)來確定星期。使用(Year, Week-of-Year)元組創建一個字典作爲關鍵字,值爲(timestamp, tweetID)的元組列表。

一旦你填充了這個字典和每個列表,你可以使用elem[1](時間戳,元組中的第二項)作爲關鍵字對每個列表進行排序。要檢索完整字典,請通過以下方式檢索:

for year_week_tuple in sorted(all_tweets): # sorts on keys and returns keys 
    print 'Year: %d, Week #: %d' % (year_week_tuple[0], year_week_tuple[1]) 
    for timestamp, tweetID in sorted(all_tweets[year_week_tuple]): 
     print 'Tweet time: %s, TweetID: %s' % (timestamp, tweetID) 
    print 'End of week' 
+0

我不知道這個功能,這是我第一次用datetime模塊。這非常有用。非常感謝! – Lupanoide