一个包含 Xml 个文件的文件夹到 Csv
A folder of Xml files to Csv
下面的代码获取 XML 个文件并将其解析为 CSV 文件
import pandas as pd
def phones_to_df(fname):
tree = cET.parse(fname)
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')]).to_csv('export.csv', index=False)
if __name__ == '__main__':
phones_to_df(fname="test.xml")
xml文件如下
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Phones>
<Date />
<Prog />
<Box />
<Feature />
<WIN>MAFWDS</WIN>
<Set>234234</Set>
<Pr>23423</Pr>
<Number>afasfhrtv</Number>
<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>
代码遍历 Phones 的元素并将它们打印到名为 test.xml[= 的 csv 文件中15=]
现在,我正在尝试修改代码,而不是只读取一个 xml 文件,而是转到一个文件夹并遍历其中的所有 xml 文件并将它们解析为一个 Csv 文件。
我知道我必须导入
from pathlib import Path
所有 xml 个文件所在的文件夹的路径
xmls = [f for f in Path('C:/Users/Desktop/Original/test').glob('*.xml')]
我正在为如何将它实现到代码中并使其工作而苦恼
您可以为每个文件名调用您的函数,例如:
pd.concat([phones_to_df(xml) for xml in xmls])
使用每个 xml 文件名调用该函数将生成一个数据帧列表,并将与 pd.concat, leaving you with a dataframe with all results. You can then export this with the to_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 个文件并将其解析为 CSV 文件
import pandas as pd
def phones_to_df(fname):
tree = cET.parse(fname)
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')]).to_csv('export.csv', index=False)
if __name__ == '__main__':
phones_to_df(fname="test.xml")
xml文件如下
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Phones>
<Date />
<Prog />
<Box />
<Feature />
<WIN>MAFWDS</WIN>
<Set>234234</Set>
<Pr>23423</Pr>
<Number>afasfhrtv</Number>
<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>
代码遍历 Phones 的元素并将它们打印到名为 test.xml[= 的 csv 文件中15=]
现在,我正在尝试修改代码,而不是只读取一个 xml 文件,而是转到一个文件夹并遍历其中的所有 xml 文件并将它们解析为一个 Csv 文件。
我知道我必须导入
from pathlib import Path
所有 xml 个文件所在的文件夹的路径
xmls = [f for f in Path('C:/Users/Desktop/Original/test').glob('*.xml')]
我正在为如何将它实现到代码中并使其工作而苦恼
您可以为每个文件名调用您的函数,例如:
pd.concat([phones_to_df(xml) for xml in xmls])
使用每个 xml 文件名调用该函数将生成一个数据帧列表,并将与 pd.concat, leaving you with a dataframe with all results. You can then export this with the to_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")