Python 将当前日期与CSV文件匹配并打印匹配项
嗨,我正在写一个python脚本来发送生日邮件之类的东西。但我被困在中间。我有一个包含姓名和生日的csv文件,并且已经编写了获取当前日期的代码Python 将当前日期与CSV文件匹配并打印匹配项,python,date,csv,datetime,smtp,Python,Date,Csv,Datetime,Smtp,嗨,我正在写一个python脚本来发送生日邮件之类的东西。但我被困在中间。我有一个包含姓名和生日的csv文件,并且已经编写了获取当前日期的代码 #Import Date import datetime CurrentDate = datetime.datetime.now().date() CurrentDate = CurrentDate.strftime("%d-%B-%Y") print(CurrentDate) 我的csv文件是 user1,13-September-2016 user
#Import Date
import datetime
CurrentDate = datetime.datetime.now().date()
CurrentDate = CurrentDate.strftime("%d-%B-%Y")
print(CurrentDate)
我的csv文件是
user1,13-September-2016
user2,19-October-2016
user3,13-September-2016
user4,25-August-2016
所以我想要的是将当前日期与这个csv的第二列匹配,得到相应的列1值,并将它们导出为字符串,就像我从datetime获得当前日期一样。如果有多个用户在相应的日期过生日,则应在其姓名之间打印“和”。我希望我问这个问题时没有犯任何错误:)只需将它们分组到一个列表中,然后输出您想要的任何内容:
import csv
from datetime import datetime
today = datetime.now().date().strftime("%d-%B-%Y")
with open("b.csv") as f:
has_birthday = [user for user, birthday in csv.reader(f) if birthday == today]
print(has_birthday)
输出:
['user1', 'user3']
您可以根据has_生日的长度添加自定义邮件:
has_birthday = [user for user, birthday in csv.reader(f) if birthday == today]
frm = "{} have their birthdays today." if len(has_birthday) > 1 else "{} has their birthday today."
print(frm.format(" and ".join(has_birthday or ["Nobody"])))
userx has their birthday today.
因此,对于一个匹配的生日:
userx has their birthday today.
对于多个:
userx and Usery have their birthdays today.
对于非用户:
Nobody has their birthday today.
谢谢大家,在做了一些工作并得到了你们的帮助后,我终于解决了这个问题
import csv
from datetime import datetime
today = datetime.now().date().strftime("%d-%B-%Y")
while True:
with open("InputFile.csv") as d:
has_birthday = [user for user, birthday, gender in csv.reader(d,skipinitialspace=True) if birthday == today]
if len(has_birthday) < 1:
exit ()
else:
with open("InputFile.csv") as f:
has_birthday = [user for user, birthday, gender in csv.reader(f,skipinitialspace=True) if birthday == today]
with open("InputFile.csv") as g:
male = [user for user, birthday, gender in csv.reader(g, delimiter=',', skipinitialspace=True) if birthday == today and gender == 'M']
with open("InputFile.csv") as h:
female = [user for user, birthday, gender in csv.reader(h, delimiter=',', skipinitialspace=True) if birthday == today and gender == 'F']
if len(has_birthday) == 1 and male:
frm = "{} has his birthday today."
elif len(has_birthday) == 1 and female:
frm = "{} has her birthday today."
else:
frm = "{} have their birthdays today."
test = (frm.format(" and ".join([", ".join(has_birthday[:-1]), has_birthday[-1]]))) if len(has_birthday) > 1 else frm.format(" and ".join(has_birthday))
print test
导入csv
从日期时间导入日期时间
今天=datetime.now().date().strftime(“%d-%B-%Y”)
尽管如此:
以d形式打开(“InputFile.csv”):
has_birth=[用户对用户,生日,csv.reader中的性别(d,skipinitialspace=True),如果生日==今天]
如果len(生日)<1:
退出()
其他:
将open(“InputFile.csv”)作为f:
has_birth=[用户对用户,生日,csv.reader中的性别(f,skipinitialspace=True),如果生日==今天]
将open(“InputFile.csv”)作为g:
男=[如果生日==今天,性别='M',则csv.reader中的用户、生日、性别(g,分隔符=',',skipinitialspace=True)]
打开(“InputFile.csv”)作为h:
女性=[如果生日==今天,性别='F',则csv.reader中的用户、生日、性别(h,分隔符=',',skipinitialspace=True)]
如果len(有_生日)==1且为男性:
frm=“{}今天是他的生日。”
elif len(生日)=1,女性:
frm=“{}今天是她的生日。”
其他:
frm=“{}今天有他们的生日。”
如果len(has_birth)>1,则test=(frm.format(“and.join”([”,“.join(has_birth[:-1]),has_birth[-1]))如果len(has_birth)>1,则test=(frm.format(“and.join”([”,“.join(has_birth))
打印测试
添加“and.”加入(生日)
的“and”在名字之间。如果不是“…他/她的…”
生日,而不是”…他们的…”
,那么是不是?还有一个原因吗?“Nobody”
是一个列表而不仅仅是一个字符串?谢谢,我会检查这个确定我检查了你给出的第一个脚本,它只给我[]作为输出。我的csv文件结构类似于Asala,2016年9月14日,因此逗号后有空格?如果有,则需要将skipinitialspace=True
添加到读卡器调用中