解析excel文件中的数据并使用python脚本发送日历邀请

解析excel文件中的数据并使用python脚本发送日历邀请,python,Python,我有一个输入excel文件,其中包含以下数据: Server Name Event Deploy Dist Type Engineer CR Number Env Deployment Status Date (IT) Start (IT) End (IT) Primary Application A X X X X X X 1/11/2019 8:30 12:30 X B X X X X X

我有一个输入excel文件,其中包含以下数据:

Server Name Event   Deploy Dist Type    Engineer    CR Number   Env Deployment Status   Date (IT)   Start (IT)  End (IT)    Primary Application
A   X   X   X   X   X   X   1/11/2019   8:30    12:30   X
B   X   X   X   X   X   X   1/11/2019   8:30    12:30   X
C   X   X   X   X   X   X   1/13/2019   8:30    12:30   X
D   X   X   X   X   X   X   1/13/2019   8:30    15:30   X
我需要发送如下日历邀请(带日期的Groupby)

1.日期、开始时间(列[start{IT]]中的较小值)、结束时间(列(End(IT))中的较大值)

以下内容应打印在日历正文中

Server Name Event   Deploy Dist Type    Engineer    CR Number   Env Deployment Status   Date (IT)   Start (IT)  End (IT)    Primary Application
A   X   X   X   X   X   X   1/11/2019   8:30    12:30   X
B   X   X   X   X   X   X   1/11/2019   8:30    12:30   X
2.与1相同

Server Name Event   Deploy Dist Type    Engineer    CR Number   Env Deployment Status   Date (IT)   Start (IT)  End (IT)    Primary Application
C   X   X   X   X   X   X   1/13/2019   8:30    12:30   X
D   X   X   X   X   X   X   1/13/2019   8:30    15:30   X
我得到了发送日历邀请的代码,但不确定如何解析上述输入,并根据输入文件中的日期发送多个邀请

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email.utils import COMMASPACE, formatdate
from email import encoders
from tabulate import tabulate
import os, datetime
import csv
import pandas

#path_to_file = "C:\Users\kj\Desktop\Jan\sample.csv"
path_to_file = "C:/Users/kj/Desktop/Jan/sample_upd.csv"
output_to_file= "C:/Users/kj/Desktop/Jan/output.csv"
df = pandas.read_csv(path_to_file)
grouped = df.groupby('Date (IT)')
text = """
"""

html = """
<html><body><p></p>
<p></p>
{table}
<p></p>
<p></p>
</body></html>
"""
for name, group in grouped:
    dates_grp = name
    group.to_csv(output_to_file)

    CRLF = "\r\n"
    attendees = ["test@test.com"]
    organizer = "ORGANIZER;CN=organiser:mailto:test@test.com"
    fro = "test@test.com <test@test.com>"

    ddtstart = datetime.datetime.now()
    dtoff = datetime.timedelta(days=1)
    dur = datetime.timedelta(hours=1)
    ddtstart = ddtstart + dtoff
    dtend = ddtstart + dur
    dtstamp = datetime.datetime.now().strftime("%Y%m%dT%H%M%SZ")
    dtstart = ddtstart.strftime("%Y%m%dT%H%M%SZ")
    dtend = dtend.strftime("%Y%m%dT%H%M%SZ")

    description = "DESCRIPTION: OS PATCHING" + CRLF
    attendee = ""
    for att in attendees:
        attendee += "ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-    PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TRUE" + CRLF + " ;CN=" + att + ";X-NUM-GUESTS=0:" + CRLF + " mailto:" + att + CRLF
    ical = "BEGIN:VCALENDAR" + CRLF + "PRODID:pyICSParser" + CRLF + "VERSION:2.0" + CRLF + "CALSCALE:GREGORIAN" + CRLF
    ical += "METHOD:REQUEST" + CRLF + "BEGIN:VEVENT" + CRLF + "DTSTART:" + dtstart + CRLF + "DTEND:" + dtend + CRLF + "DTSTAMP:" + dtstamp + CRLF + organizer + CRLF
    ical += "UID:FIXMEUID" + dtstamp + CRLF
    ical += attendee + "CREATED:" + dtstamp + CRLF + description + "LAST-MODIFIED:" + dtstamp + CRLF + "LOCATION:" + CRLF + "SEQUENCE:0" + CRLF + "STATUS:CONFIRMED" + CRLF
    ical += "SUMMARY:test " + ddtstart.strftime(
        "%Y%m%d @ %H:%M") + CRLF + "TRANSP:OPAQUE" + CRLF + "END:VEVENT" + CRLF + "END:VCALENDAR" + CRLF

    with open(output_to_file) as csvfile:
        reader = csv.reader(csvfile)
        eml_body = list(reader)
    text = text.format(table=tabulate(eml_body, headers="firstrow", tablefmt="grid"))
    html = html.format(table=tabulate(eml_body, headers="firstrow", tablefmt="html"))
    eml_body_bin = "This is the email body in binary - two steps"
    msg = MIMEMultipart('mixed')
    msg['Reply-To'] = fro
    msg['Date'] = formatdate(localtime=True)
    msg['Subject'] = "pyICSParser invite" + dtstart
    msg['From'] = fro
    msg['To'] = ",".join(attendees)

    #part_email = MIMEText(eml_body, "html")
    part_cal = MIMEText(ical, 'calendar;method=REQUEST')

    #msgAlternative = MIMEMultipart('alternative')
    msgAlternative = MIMEMultipart("alternative", None, [MIMEText(text), MIMEText(html, 'html')])
    msg.attach(msgAlternative)

    ical_atch = MIMEBase('application/ics', ' ;name="%s"' % ("invite.ics"))
    ical_atch.set_payload(ical)
    encoders.encode_base64(ical_atch)
    ical_atch.add_header('Content-Disposition', 'attachment; filename="%s"' % ("invite.ics"))

    eml_atch = MIMEBase('text/plain', ' ')
    # encoders.encode_base64(eml_atch)
    encoders.encode_7or8bit(eml_atch)
    eml_atch.add_header('Content-Transfer-Encoding', "")

    #msgAlternative.attach(part_email)
    msgAlternative.attach(part_cal)

    mailServer = smtplib.SMTP('test.test.com')
    # mailServer = smtplib.SMTP('MSGEXSV2D3906',25)
    # mailServer = smtplib.SMTP(s)
    mailServer.ehlo()
    # mailServer.starttls()
    mailServer.ehlo()
    # mailServer.login(login, password)
    mailServer.sendmail(fro, attendees, msg.as_string())
    mailServer.close()
    break
导入smtplib
从email.mime.multipart导入MIMEMultipart
从email.mime.base导入MIMEBase
从email.mime.text导入MIMEText
从email.utils导入COMMASPACE,formatdate
从电子邮件导入编码器
从表格导入表格
导入操作系统,日期时间
导入csv
进口大熊猫
#路径\u至\u file=“C:\Users\kj\Desktop\Jan\sample.csv”
路径至文件=“C:/Users/kj/Desktop/Jan/sample\u upd.csv”
输出到文件=“C:/Users/kj/Desktop/Jan/output.csv”
df=pandas.read\u csv(路径到文件)
分组=df.groupby('日期(IT)')
text=”“”
"""
html=”“”

{table}

""" 对于名称,分组为: 日期=名称 group.to_csv(输出_至_文件) CRLF=“\r\n” 与会者=[”test@test.com"] organizer=“organizer;CN=organizer:mailto:test@test.com" fro=”test@test.com " ddtstart=datetime.datetime.now() dtoff=datetime.timedelta(天=1) dur=datetime.timedelta(小时=1) ddtstart=ddtstart+dtoff dtend=ddtstart+dur dtstamp=datetime.datetime.now().strftime(“%Y%m%dT%H%m%SZ”) dtstart=ddtstart.strftime(“%Y%m%dT%H%m%SZ”) dtend=dtend.strftime(“%Y%m%dT%H%m%SZ”) description=“description:OS补丁”+CRLF attendee=“” 对于与会者中的att: attendee+=“attendee;CUTYPE=个人;ROLE=REQ-参与者;PARTSTAT=已接受;RSVP=TRUE”+CRLF+“CN=”+att+“X-NUM-GUESTS=0:“+CRLF+”邮件收件人:“+att+CRLF” ical=“BEGIN:VCALENDAR”+CRLF+“PRODID:pyICSParser”+CRLF+“版本:2.0”+CRLF+“CALSCALE:GREGORIAN”+CRLF ical+=“方法:请求”+CRLF+“开始:VEVENT”+CRLF+“DTSTART:“+DTSTART+CRLF+”DTEND:“+DTEND+CRLF+”DTSTAMP:“+DTSTAMP+CRLF+组织者+CRLF” ical+=“UID:FIXMEUID”+dtstamp+CRLF ical+=与会者+“已创建:”+dtstamp+CRLF+描述+“上次修改:”+dtstamp+CRLF+“位置:”+CRLF+“序列:0”+CRLF+“状态:已确认”+CRLF ical+=“摘要:测试”+ddtstart.strftime( %Y%m%d@%H:%m“+CRLF+”传输:不透明“+CRLF+”结束:VEVENT“+CRLF+”结束:VCALENDAR”+CRLF 以csvfile的形式打开(输出到文件): reader=csv.reader(csvfile) eml_body=列表(读卡器) text=text.format(表格=表格(eml_body,headers=“firstrow”,tablefmt=“grid”)) html=html.format(table=tablate(eml_body,headers=“firstrow”,tablefmt=“html”)) eml_body_bin=“这是二进制的电子邮件正文-两步” msg=MIMEMultipart('mixed') msg['Reply-To']=fro msg['Date']=formattate(localtime=True) msg['Subject']=“pyICSParser invite”+dtstart msg['From']=fro msg['To']=“,”。加入(与会者) #part_email=MIMEText(eml_body,“html”) part_cal=MIMEText(cal,‘日历;方法=请求’) #msgAlternative=MIMEMultipart('备选方案') msgAlternative=MIMEMultipart(“可选”,无,[MIMEText(text),MIMEText(html,'html')])) 附加消息(msgaltentive) ical_atch=MIMEBase('application/ics',';name=“%s”%”(“invite.ics”)) ical_atch.set_有效载荷(ical) 编码器。编码基础64(ical_atch) ical_atch.add_头('Content-Disposition','attachment;filename=“%s”'%”(“invite.ics”)) eml_atch=MIMEBase('text/plain','') #编码器。编码基础64(eml\U atch) 编码器。编码7位或8位(eml_atch) eml_atch.add_头('Content-Transfer-Encoding',“”) #msgaltentive.attach(part_电子邮件) M可选附件(零件号) mailServer=smtplib.SMTP('test.test.com') #mailServer=smtplib.SMTP('MSGEXSV2D3906',25) #mailServer=smtplib.SMTP mailServer.ehlo() #mailServer.starttls() mailServer.ehlo() #mailServer.login(登录名,密码) mailServer.sendmail(fro、与会者、msg.as_string()) mailServer.close() 打破
问题:解析excel文件中的数据并发送日历邀请

您必须使用
函数
模块化为以下内容:

  • 模块数据

    • 将Excel数据分组
    • 逐行分析数据
  • 模块ICAL

    • 从Excel行数据创建
      ICAL
      记录
  • 模块邮件

    • 使用
      ICAL
      记录准备邮件
    • 寄信
  • 实施-1.模块数据


  • 我被困在“从excel文件获取输入并进一步处理”更新了代码,现在我可以使用分组数据发送invite。但是在解析groupy输出的日期和时间方面需要帮助。请提供任何建议?更新了代码,现在我可以使用分组数据发送invite。但是在解析groupy输出的日期和时间方面需要帮助。请提供任何建议?您认为这有帮助吗?谢谢,这很有帮助请允许我完成脚本。。。。
    import pandas
    df = pandas.read_excel(open('your_xls_xlsx_filename','rb'), sheetname='Sheet 1')
    
    grouped = df.groupby('Date (IT)')
    
    for name, group in grouped:
        ...