问题描述
我正在解析一个我对特定日期感兴趣的大型 XML 文件。此时,我可以将搜索范围缩小到一个小列表,如下所示:
date_list = [<day>15</day>,<month>10</month>,<year>2020</year>]
我需要的是一个格式如下的日期:
15-10-2020
我该怎么做?谢谢!
考虑按原样使用 XML 标记。我用了漂亮的汤。
解决方法
date_list = ['<day>15</day>','<month>10</month>','<year>2020</year>']
new_date = []
for elem in date_list:
new_date.append(elem.split(">")[1].split("<")[0])
new_date = "-".join(new_date)
print (new_date)
输出:
15-10-2020
,
如果标签的顺序不一致,您可以使用 ElementTree 来解析标签和文本内容
from xml.etree import ElementTree as ET
date_list = ['<day>15</day>','<year>2020</year>']
# create an empty dict
a_date_dict = {}
for date_tag in date_list:
# parse the string to an ElementTree
el = ET.fromstring(date_tag)
# extract data
a_date_dict[el.tag] = int(el.text)
# at this stage you can output the string
print('{day}-{month}-{year}'.format(**a_date_dict))
# or create a date object
from datetime import date
a_date = date(**a_date_dict)
# Or if you like oneliners and use python 3.8
a_date = date(**{(b:=ET.fromstring(a)).tag:int(b.text) for a in date_list})
如果 date_list
中的项目是来自 Beautiful Soup 库的 Tag 对象,那么您应该能够使用 contents
属性
print('{}-{}-{}'.format(*[a.contents[0] for a in date_list]))