2016-09-16 50 views
1

嘗試解析數據文件(下面)以僅查找用戶在某個日期之前啓動的行。然後從這些行的字列中按照升序排列值(按開始日期)過濾CSV文件中的行,然後根據列對其進行排序

id, name, start_date, role, end_date, words 
657, mystical, 1351140260, cleaner, 1951140260, very lazy 
1987, kanyau, 1451189768, watchman, 1539742445, sleeping 

任何人都可以協助嗎?

P.S:新手在這裏,但這裏是我一直在玩的東西。

date_pivot = "6/09/2010 00:00:00" 
d = datetime.strptime(date_pivot, "%d/%m/%Y %H:%M:%S") 
date_pivot = time.mktime(d.timetuple()) 
dp = int(date_pivot) 
infile = csv.DictReader(open("sample_data.csv","rb"), delimiter=",") 
previous_users = [row for row in infile if row['start_date'] < 'dp'] 
#print previous_users 
with open('final_test.csv','wb') as fou: 
    dw = csv.DictWriter(fou, previous_users.keys()) 
    dw.writeheader() 
    dw.writerow(my_dict) 
+0

目前還不清楚你的意思是「...,然後按升序(按開始日期)從這些行的單詞列中排列值」,因爲單詞列中的值沒有開始日期(或它對所有人來說都是一樣的)。請[編輯]你的問題,並解釋你想如何更好地分類/重新排序。 – martineau

回答

0

應該相當簡單。既然你需要類型轉換,並做了查找你的關鍵功能,lambda是簡單的:

previous_users.sort(key=lambda row: int(row['start_date'])) 

的說明:傳遞previous_users.keys()DictWriter的字段名是錯上加錯。一,你需要做previous_users[0].keys()(在驗證它是非空的之後),因爲previous_usersdictlist,而不是dict。兩個,dict s沒有定義的順序,所以你的輸出列可能會重新排列。如果這不是問題,那就這樣吧。但是,您可能希望按照所需的順序明確地傳遞字段名稱,或者按照從DictReader開始的正確順序讀取它們,例如, csv.DictWriter(fou, infile.fieldnames)

附加錯字提示:假設您要比較int(row['start_date']) < dp;您需要轉換爲int,並且您想要與dp中的值進行比較,而不是字符串"dp"

相關問題