如何使用 elementtree 替换日期字符串并解析 python 中的 xml 数据?

How to replace date string and parse xml data in python using elementtree?

我有 xml 个数据位于 link 下面。该报告每天都会更新,因此从 link 开始,唯一改变的就是日期。我想实现以下目标

注:以下link和XML数据用于演示目的

XML Link:

https://www.mywesbite.com/report/%5B10/01/2021%22%7D

XML数据

b'<?xml version=\'1.0\' encoding=\'UTF-8\'?><results exportTime="Date time"><report label="Report Title"><record report_date="10/01/2021" narrative="null"><report label="report label"></report>

需要的东西: 将上面link中的日期替换为今天的日期,看今天的日期是否符合report_date。如果 report_date 与今天的日期匹配,则解析今天的报告,否则解析昨天的报告。如果 today_date 不存在,也解析昨天的报告。

为了替换日期,我有下面的代码,它替换了日期。但是,我不确定如何实现 Things needed 中提到的上述内容。我是新手python程序员

提前感谢您的宝贵时间!

from datetime import date,timedelta
today1 = date.today().strftime("%m/%d/%Y") #gets today's date
yesterday = datetime.now() - timedelta(1)
yesterday=datetime.strftime(yesterday, '%m/%d/%Y') #gets yesterday's date

url_to_replace="https://www.mywesbite.com/report/%5B10/01/2021%22%7D"
url_to_replace=url_to_replace.replace('10/1/2021',yesterday)

您不必替换它 - 您可以在 url.

中将 strftime 与完整的 url%m/%d/%Y 一起使用

因为%strftime中有特殊意义所以在%%5B%%22%%7D

中需要双%%
from datetime import datetime, timedelta

today = datetime.now()
yesterday = today - timedelta(days=1)

url = yesterday.strftime("https://www.mywesbite.com/report/%%5B%m/%d/%Y%%22%%7D")

print('    today:', today.strftime('%m/%d/%Y'))
print('yesterday:', yesterday.strftime('%m/%d/%Y')) 
print('      url:', url)

结果:

    today: 10/06/2021
yesterday: 10/05/2021
      url: https://www.mywesbite.com/report/%5B10/05/2021%22%7D

或者您可以使用 f-string 将日期放在正确的位置

yesterday_str = yesterday.strftime("%m/%d/%Y")
url = f"https://www.mywesbite.com/report/%5B{yesterday_str}%22%7D"

在此处添加从 xml

获取 report_date 的示例代码
data = b'''<?xml version=\'1.0\' encoding=\'UTF-8\'?>
<results exportTime="Date time">
<report label="Report Title">
<record report_date="10/01/2021" narrative="null">
<report label="report label">
</report>
</record>
</report>
</results>
'''

from xml.etree import ElementTree as ET
from datetime import datetime, timedelta

root = ET.fromstring(data)

report_date = root.find('.//record[@report_date]')

if report_date:  # if not None then get attribue                         
    report_date = report_date.attrib['report_date']

today_str = datetime.now().strftime('%m/%d/%Y')

print('report_date:', report_date)
print('      today:', today_str)
print('   the same:', report_date == today_str)

if report_date == today_str:
    print("parse today's report")
else:
    print("parse yesterday's report")

结果:

report_date: 10/01/2021
      today: 10/06/2021
   the same: False

parse yesterday's report