仅打印.csv文件中的特定行

2 投票
4 回答
9100 浏览
提问于 2025-04-17 17:15

我有一个.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的格式)。

所以,如果我想找的是三月份的出生日期,那么程序就会打印出约翰·史密斯的那一行。

如果有人能帮我一下,那就太好了,我已经为这个问题苦恼了一段时间了。

4 个回答

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

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得更简单易懂。

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' 会匹配一个以两个数字开头,接着是一个'/',然后是月份'03'的字符串。

想了解更多信息,可以查看 csvkit教程

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(整数)是个好主意,这样你就可以很方便地和你想要的月份进行比较。

撰写回答