【发布时间】:2020-06-23 01:17:58
【问题描述】:
我对 python 很陌生。
我有一个包含如下数据的 xml 文件:
<SCHEDULE type="ILN_BGY_G162_SL1D2T4T4SL2D2T4T4" inter_league="0" balanced_games="1" games_per_team="162" preferred_start_day="2">
<GAMES>
<GAME day="-34" time="1905" away="14" home="9" type="2" />
<GAME day="-34" time="1905" away="16" home="11" type="2" />
<GAME day="78" time="1905" away="12" home="15" type="2" />
<GAME day="79" time="1905" away="6" home="8" type="2" />
</GAMES>
</SCHEDULE>
我正在尝试删除 xml 文件中具有day 值不在列表day_range 中的所有元素day_range = [78,79,80]。使用上面的示例数据,我将删除 day="-34" 的元素并保留 day="78" 和 day="79" 的元素。
我非常仔细地遵循以下问题的答案,并得到了各种错误和不需要的结果,我将在下面解释。我尝试过的接受的解决方案:
How do I Filter Values From XML in Python
当我尝试以下代码时
import xml.etree.ElementTree as ET
from pathlib import Path
day_range = [78,79,80]
schedule = ET.parse(path)
root = schedule.getroot()
for element in root:
for day in element:
if element['day'] in day_range:
root.remove(element)
if element['day'] in day_range: 元素索引必须是整数时出现类型错误。
如下稍微改变一下,我在root.remove(element)上得到一个ValueError:list.remove(x):x不在列表中
for element in root:
for day in element.findall('GAME'):
if element[0] in day_range:
root.remove(element)
schedule.write('test.xml')
我希望输出 xml 看起来像这样:
<SCHEDULE type="ILN_BGY_G162_SL1D2T4T4SL2D2T4T4" inter_league="0" balanced_games="1" games_per_team="162" preferred_start_day="2">
<GAMES>
<GAME day="78" time="1905" away="12" home="15" type="2" />
<GAME day="79" time="1905" away="6" home="8" type="2" />
</GAMES>
</SCHEDULE>
我整天都在研究这个问题,我认为我错过了一个重要的概念,但找不到它。
【问题讨论】:
-
请编辑您的问题,首先,修复您的 xml,因为它无效;第二澄清您是否要删除
day_range中的天数或不在列表中的天数;添加几个要删除的元素示例和几个要保留的元素,最后根据这些示例显示您的预期输出。 -
根据@JackFleeting 的 cmets 编辑。