仅打印.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的格式)。
所以,如果我想找的是三月份的出生日期,那么程序就会打印出约翰·史密斯的那一行。
如果有人能帮我一下,那就太好了,我已经为这个问题苦恼了一段时间了。
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
(整数)是个好主意,这样你就可以很方便地和你想要的月份进行比较。