gpt4 book ai didi

Python:如何生成 "Missing Elements"的文件

转载 作者:太空宇宙 更新时间:2023-11-03 14:56:13 25 4
gpt4 key购买 nike

我有一组 xml 数据,如下所示:

<widgets>
<widget number = 'a1'>
...
info regarding widget a1
...
</widget>
<widget number = 'a2'>
...
info regarding widget a2
...
</widget>
...
...
...
<widget number = 'a10000000000000000'>
...
info regarding widget a10000000000000000
...
</widget>
</widgets>

我正在解析文件,查找每个小部件的信息,一切进展顺利。

我正在寻找一种方法来生成“丢失”小部件的 csv。它们按数字顺序排列(即,a2 应该在 a1 后面,a3 应该在 a2 后面,等等),但可能会有一些缺失。

我已经需要从前面去掉“a”,但我不确定如何设置一些东西,如果有“跳过”,所有内容都会添加到“跳过”文件中。

也许,通过一个例子会更容易说明这一点。如果我有: ... ... ... ... 有关小部件 a10 的信息 ... ... 有关小部件 a12 的信息 ... ... ... ...我想要一个带有“a11”的列表,因为那是缺少的。

如果我有: ... ... ... ... 有关小部件 a17 的信息 ... ... 有关小部件 a20 的信息 ... ... ... ...我想要一份 list a18a19

等等。我知道如何将列表放入 csv 中,所以我真正想要的是如何通过确定存在跳过、评估跳过的大小然后使用 for 将条目添加到列表来生成第一个列表环形。

最佳答案

首先,我创建一个带有一些间隙的小部件的 xml 文件。然后,我使用 lxml 库解析它,并使用 xpath 表达式查找 widget 元素的集合。我从每个元素中挑选出 number 属性,然后在列表理解中挑选包含该数字的切片,以获取所有 available_widgets 的编号。

在这一点上,我采取了懦夫的出路:我假设可能的小部件数量的范围很小。我浏览 available_widgets 表示的范围,看看缺少哪些内容。

如果,事实上,您需要查看大量的可能性,那么您可能会在 SO 的某个地方找到查找列表或序列中间隙的方法。

>>> nums = [1,2,3,5,6,8,11,14,17,20]
>>> with open('temp.xml', 'w') as temp:
... r = temp.write('<widgets>')
... for num in nums:
... r = temp.write('<widget number="a%s">'%num)
... r = temp.write('info regarding widget a%s'%num)
... r =temp.write('</widget>')
... r = temp.write('</widgets>')
...
>>>
>>> from lxml import etree
>>> tree = etree.parse('temp.xml')
>>> widgets = tree.xpath('.//widget')
>>> available_widgets = [int(widget.attrib['number'][1:]) for widget in widgets]
>>> available_widgets
[1, 2, 3, 5, 6, 8, 11, 14, 17, 20]
>>> missing_widgets = []
>>> for num in range(min(available_widgets), max(available_widgets)+1):
... if not num in available_widgets:
... missing_widgets.append(num)
...
>>> missing_widgets
[4, 7, 9, 10, 12, 13, 15, 16, 18, 19]

关于Python:如何生成 "Missing Elements"的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45552290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com