簡體   English   中英

僅打印.csv文件中的某些行

[英]Printing only certain rows in a .csv file

我有一個.csv文件,其中包含與此類似的出生日期字段:

John,Smith,34 La La Lane,14/03/85,johnsmith@email.com
Sarah,Second,42 Wallaby Way,11/06/92,sarahsecond@email.com
Third,Example,99 Peacock Terrace,04/12/89,thirdexample@email.com

我想制作一個程序,只打印某個月內出生的條目文件中的行(在這種情況下,月份是在第一個斜杠之后,即dd / mm / yy)。

因此,如果所需的月份是3月份,它將打印出John Smith的條目。

對此的任何幫助都會很棒,我已經掙扎了一段時間

我不確定你正在努力解決哪個問題,所以我會給出一個一般性的答案。 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是一個好主意,因此您可以輕松地將其與您想要的任何月份進行比較。

這是一個不同的方法...對於使用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,johnsmith@email.com

需要注意的一點是, csvkit假設所有.csv文件都有標題行。 這就是為什么csvgrep的結果顯示標題行的原因。 這也意味着您必須向數據文件添加標題,如下所示:

First,Last,Address,Birthdate,Email
John,Smith,34 La La Lane,14/03/85,johnsmith@email.com
Sarah,Second,42 Wallaby Way,11/06/92,sarahsecond@email.com
Third,Example,99 Peacock Terrace,04/12/89,thirdexample@email.com 

命令行參數說明:

$ 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教程以獲取更多信息。

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

盡可能多的教程類型我可以投入其中:-)

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM