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

时间:2013-02-26 23:19:09

标签: python csv

我有一个.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的条目。

对此的任何帮助都会很棒,我已经苦苦挣扎了一段时间

4 个答案:

答案 0 :(得分:8)

我不确定你正在努力解决哪个问题,所以我会给出一个一般性的回答。 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 :(得分: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,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 tutorial了解详情。

答案 2 :(得分: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

答案 3 :(得分: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)