Python 添加到元素到标头
下面的代码指向标题名Phones,并将每个元素解析为csv文件。这是为该文件夹中的每个XML文件完成的。这意味着来自所有这些XML文件的事实的所有元素都被解析为一个CSV文件 这是密码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
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链接,将不胜感激: