一个Xml文件到Cs的文件夹

2024-09-24 22:30:28 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码获取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>

代码遍历手机的元素,并将它们打印到名为的csv文件中测试.xml

现在,我尝试修改代码,这样它就不会只读取一个xml文件,而是进入一个文件夹,遍历其中的所有xml文件,并将它们解析为一个Csv文件。你知道吗

我知道我必须进口

from pathlib import Path

所有xml文件所在文件夹的路径

xmls = [f for f in Path('C:/Users/Desktop/Original/test').glob('*.xml')] 

我正在努力研究如何将其实现到代码中并使其工作


Tags: 文件csvto代码textinimportfor
1条回答
网友
1楼 · 发布于 2024-09-24 22:30:28

您可以为每个文件名调用函数,例如:

pd.concat([phones_to_df(xml) for xml in xmls])

用每个xml文件名调用函数将产生一个dataframe列表,该列表将与pd.concat连接起来,留下一个包含所有结果的dataframe。然后您可以使用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")

相关问题 更多 >