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

嗨,我正在写一个python脚本来发送生日邮件之类的东西。但我被困在中间。我有一个包含姓名和生日的csv文件,并且已经编写了获取当前日期的代码

#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
添加到读卡器调用中