我有一个.xml文件目录,我对其中的某些特定部分感兴趣,例如:
<element1>
<elem1 id="e1" section="1" type="fruit" obj="156" pos="21" str="apple" />
<elem2 id="e2" section="2" type="fruit" obj="236" pos="11" str="orange" />
....
<elem_N id="N" section="N" type="Animal" obj="7476" pos="7" str="lion" />
</element1>
如何将element1
标记中的所有标记作为列提取到pandas数据帧中。类似这样的(*)
:
filename, elem id, section, type, obj, pos, str
filename1, elem1, 1, fruit, 156, 21, apple
filename2, elem2, 2, fruit, 236, 11, orange
...
filename_N, elem_N, N, Animal, 7476, 7, lion
到目前为止,我试图:
在:
import os, glob
from bs4 import BeautifulSoup
input_dir = glob.glob('../XML_FILES/*xml')
for e in input_dir:
file_name = os.path.basename(e)[:-6] +'.txt'
soup = BeautifulSoup(open(e),"lxml")
element1 = soup.findAll('element1')
print(file_name,element1)
上面的代码在列表中打印:filename
和完整的elemN
。但是,我不明白如何将它转换成一个数据帧。因此,如何获得(*)
?你知道吗
您可以通过一个接一个地解析文件来解决这个问题,将结果收集到一个字典列表收集
elem*
标记名和属性值。最后,实例化一个DataFrame
实例:下面是我执行脚本时它的输出:
您甚至可以使用列表理解在单行中构造
data
列表,但这可能会对程序的可读性产生负面影响:相关问题 更多 >
编程相关推荐