2016-09-16 41 views
0

我想讀取一個csv文件,並解析數據,並返回行(start_date)只有當日期是在2010年9月6日之前。然後從行中打印相應的值(單詞)按升序排列。我可以使用下面的完成上半年:如何打印csv行的升序Python

import csv 

with open('sample_data.csv', 'rb') as f: 

read = csv.reader(f, delimiter =',') 

for row in read: 

    if row[13] <= '1283774400': 
     print(row[13]+"\t \t"+row[16]) 

它返回正確的起始日期範圍,以及相應的字列的值,但它們不是按升序如果做得正確這將顯示一條消息返回。我已經嘗試使用sort()和sorted()函數,創建一個空列表來填充然後將其附加到行後,但我只是不知道在哪裏或如何將它納入現有的代碼,並且非常不成功。任何幫助將不勝感激。

+0

你想如何排序它,我的意思是你想爲字列值的排序數據? – LearningNinja

+0

如果行中的日期小於或等於2010年9月6日,我想從start_date列中返回數據。然後從滿足條件的words列中返回數據。我可以從列中返回正確的行,但無法按升序打印數據。我正在嘗試使用sort()或sorted()來打印升序,但它不打印正確的行或列。 – Adam

回答

0

只是根據< date標準,根據第13行作爲整數讀取列表,過濾列表,並對其進行排序

注意,常見的錯誤是過濾爲ASCII(可能出現工作),但是需要整數轉換來避免排序問題。

import csv 

with open('sample_data.csv', 'r') as f: 
    read = csv.reader(f, delimiter =',') 
    # csv has a title, we have to skip it (comment if no title) 
    title_row = next(read) 
    # read csv and filter out to keep only earlier rows 
    lines = filter(lambda row : int(row[13]) < 1283774400,read) 

# sort the filtered list according to the 13th row, as numerical 
slist = sorted(lines,key=lambda row : int(row[13])) 

# print the result, including title line 
for row in title_row+slist: 
    #print(row[13]+"\t \t"+row[16]) 
    print(row) 
+0

運行此腳本時出現錯誤消息。 ValueError:int()與基數10無效的文字:'start_date'。實際的excel文件使用'start_date'作爲其 – Adam

+0

這個列的id,這就是我的評論線的一點:skip title就像這樣:'title_row = next(read)'。編輯過我的帖子,所以標題行被考慮在內。 –

+0

謝謝。我添加了跳過標題的代碼,但是我收到另一個錯誤:Traceback(最近一次調用最後一個): 文件「」,第2行,在 print(row [13] +「\ t \ t」+行[16]) IndexError:字符串索引超出範圍(我不確定這是否是縮進問題或什麼,我相信我縮進正確,使用IDLE 2.7.10 – Adam