Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 添加到元素到标头_Python_Xml_Elementtree - Fatal编程技术网

Python 添加到元素到标头

Python 添加到元素到标头,python,xml,elementtree,Python,Xml,Elementtree,下面的代码指向标题名Phones,并将每个元素解析为csv文件。这是为该文件夹中的每个XML文件完成的。这意味着来自所有这些XML文件的事实的所有元素都被解析为一个CSV文件 这是密码 import xml.etree.cElementTree as cET import pandas as pd from pathlib import Path def phones_to_df(fname): tree = cET.parse(fname) return pd.DataFra

下面的代码指向标题名Phones,并将每个元素解析为csv文件。这是为该文件夹中的每个XML文件完成的。这意味着来自所有这些XML文件的事实的所有元素都被解析为一个CSV文件

这是密码

import xml.etree.cElementTree as cET
import pandas as pd
from pathlib import Path

def phones_to_df(fname):
    tree = cET.parse(fname)
    return pd.DataFrame([{**{el.tag: el.text for el in list(phone)},
                          **{f'nuk_{k}': v for k, v in phone.find('nuk').items()}}
                  for phone in tree.iterfind('Phones')])

if __name__ == '__main__':
    xmls = [f for f in Path('C:/Users/Desktop/Original/test').glob('*.xml')] 
    df = pd.concat([phones_to_df(xml) for xml in xmls])
    df.to_csv("C:/Users/Desktop/Original/all.csv")
这就是XML文件的外观

<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Phones>
    <Date />
    <Prog />
    <Box />
    <Feature />
    <PR>1231</PR>
    <Set>234234</Set>
    <FD>23423</FD>
    <Reno>454</Reno>
    <Simple>dfasd</Simple>
    <Nr />
    <gt>6070106091</gt>
    <Reno>1233</Reno>
    <QW>3234</QW>
    <ER />
    <VR />
    <Use />
    <Dar>sdfsd</Dar>
    <age />
    <name1>sdfsfdfs</name1>
    <Sys>Itone</Sys>
    <aac>2014</aac>
    <time>02:00</time>
    <nuk name="This is some text" text_g="asadsdas" text_h="2">fsdfsfd3432fdf</nuk>
  </Phones>

</Data>

1231
234234
23423
454
dfasd
6070106091
1233
3234
自卫队

如果
手机中的节点是唯一的,您只需调整正在构建的字典,创建数据帧,并添加所需的额外列:

def phones_to_df(fname):
    tree = cET.parse(fname)
    return pd.DataFrame([{'PLAN': f'{phone.find("PR").text}_{phone.find("Reno").text}',
                          **{el.tag: el.text for el in phone},
                          **{f'nuk_{k}': v for k, v in phone.find('nuk').items()}
                          }
                  for phone in tree.iterfind('Phones')])

如果
Phones
中的节点是唯一的,您只需调整正在构建的字典,以创建数据帧,并添加所需的额外列:

def phones_to_df(fname):
    tree = cET.parse(fname)
    return pd.DataFrame([{'PLAN': f'{phone.find("PR").text}_{phone.find("Reno").text}',
                          **{el.tag: el.text for el in phone},
                          **{f'nuk_{k}': v for k, v in phone.find('nuk').items()}
                          }
                  for phone in tree.iterfind('Phones')])

您的代码有一个缺陷:因为您有重复的标记(例如,
'Reno'
出现两次),所以字典中只存储最后一个标记,因为字典中的键是唯一的。或者重复的
'Reno'
标记可能是一个错误。您的代码有一个缺陷:因为您有重复的标记(例如,
'Reno'
出现两次),只有最后一个标记存储在字典中,因为字典中的键是唯一的。或者重复的
'Reno'
标记是一个错误。谢谢你,这不是问题的一部分,但我似乎得到的第一列只有零。我不知道如何摆脱它。这是数据帧的行索引@be1995的外观,由
pd.to_csv
添加。要不添加它,请使用如下标志:
df.To_csv(“path/To/file”,index=False)
。将其标记为已应答。有一个类似的问题,就像这一个,但更复杂。如果你能看一看,我将不胜感激链接:谢谢,这不是问题的一部分,但我似乎得到的第一列只有零。我不知道如何摆脱它。这是数据帧的行索引@be1995的外观,由
pd.to_csv
添加。要不添加它,请使用如下标志:
df.To_csv(“path/To/file”,index=False)
。将其标记为已应答。有一个类似的问题,就像这一个,但更复杂。如果您可以查看it链接,将不胜感激: