2013-02-26 1074 views
2

我有一個包含類似於此生領域的最新.csv文件:只打印在.csv文件中的某些行

John,Smith,34 La La Lane,14/03/85,[email protected] 
Sarah,Second,42 Wallaby Way,11/06/92,[email protected] 
Third,Example,99 Peacock Terrace,04/12/89,[email protected] 

我想打一個程序,只打印文件中的行在某個月份出生的參賽作品(在這種情況下,該月份是在第一個斜槓之後,即dd/mm/yy)。

因此,如果需要的月份是3月份,它會打印John Smith的條目。

任何幫助將是巨大的,我一直在掙扎了一會兒

+1

請編輯您的帖子以包含您的解決方案。謝謝。 – bernie 2013-02-26 23:26:35

回答

7

我不知道你在掙扎的問題的哪一部分,所以我會給出一個有點籠統的回答。 Python有您可以使用這樣一個CSV閱讀:

import csv 
desiredMonth = 3 
with open('people.csv', 'rb') as csvfile: 
    content = csv.reader(csvfile, delimiter=',') 
    for row in content: 
     month = int(row[3].split('/')[1]) 
     if month == desiredMonth: 
      # print the row or store it in a list for later printing 

row就已經被分離出來,你到一個列表,所以row[3]將是生日。 split()然後將月份分成小塊,[1]給出第二塊,即月份。將它轉換爲int是個不錯的主意,因此您可以輕鬆地將其與任何您想要的月份進行比較。

+1

我的主要問題是分裂月份。你能否進一步解釋那部分代碼? 感謝您的幫助! – TheFrostGuru 2013-02-26 23:35:24

+0

編輯給予更多的細節 – goron 2013-02-26 23:41:24

+0

完美!非常感謝你:) – TheFrostGuru 2013-02-26 23:44:58

1
import csv 
with open('yourfile.csv', 'rb') as csvfile: 
    spamreader = csv.reader(csvfile, delimiter=',') 
    for row in spamreader: 
     date = row[3] 
     month = date.split('/')[1] 
     if int(month) >= YOUR_MONTH_HERE 
      print row 
1

多達教程類型,因爲我可以把它付諸表決:-)

somecsvfile=r'/home/me/Desktop/txt.csv' 
the_month_you_are_looking_for = 6 # as in june. 
with open(somecsvfile, 'r') as fi: 
    for line in fi: 
     list_from_text = line.split(',') 
     bday = list_from_text[3] 
     bmonth = int(bday.split('/')[1]) 
     if bmonth == the_month_you_are_looking_for: 
      print (line) 
+0

除了一堆錯誤之外,這不會爲goron的回答添加任何內容(例如,'for line in fi.readlines():'而不是'in line in fi:',打開文件'r'而不是''rb''等)並嘗試執行手動CSV解析,而不是使用'csv'。 – abarnert 2013-02-26 23:54:42

2

這裏有一個不同的方法......對於CSV文件時,Python包csvkit安裝了大量的命令 - 這些工具可讓您輕鬆切割和切割.csv文件。

$ pip install csvkit 

這將安裝一個名爲csvgrep(等)的命令。

$ csvgrep -c 4 -r '\d{2}/03' yourfile.csv 
First,Last,Address,Birthdate,Email 
John,Smith,34 La La Lane,14/03/85,[email protected] 

有一點要注意的是,csvkit假定所有的.csv文件有標題行。這就是爲什麼csvgrep的結果顯示標題行。這也意味着,你將有一個頭添加到你這樣的數據文件:

First,Last,Address,Birthdate,Email 
John,Smith,34 La La Lane,14/03/85,[email protected] 
Sarah,Second,42 Wallaby Way,11/06/92,[email protected] 
Third,Example,99 Peacock Terrace,04/12/89,[email protected] 

命令行參數的說明:

$ csvgrep -c 4 -r '\d{2}/03' yourfile.csv 
-c specifies which column you want to search 
-r specifies the regular expression you want to match in the column 

正則表達式「^ \ d {2}/03 '將匹配以2位開頭的字符串,然後是'/',然後是'03'月份。

查看csvkit tutorial瞭解更多信息。