如何使用 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
我有 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