首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Petl读取XML文件

用Petl读取XML文件
EN

Stack Overflow用户
提问于 2018-09-19 04:12:44
回答 1查看 1.1K关注 0票数 0

我正在尝试将XML文件中的信息解析为一个表,该表已经从另一个带有Petl的CSV文件中创建,并且在fromxml()函数的语法上遇到了问题。

XML文件包含:

代码语言:javascript
复制
    <Locations>
  <qld_location>
    <Suburb>Brisbane-Central</Suburb>
    <Lat>-27.46758</Lat>
    <Long>153.027892</Long>
  </qld_location>
  <qld_location>
    <Suburb>Robertson</Suburb>
    <Lat>-27.565733</Lat>
    <Long>153.057213</Long>
  </qld_location>
  <qld_location>
    <Suburb>Logan-Village</Suburb>
    <Lat>-27.767054</Lat>
    <Long>153.116881</Long>
  </qld_location>
</Locations>

我现在有一张桌子:

代码语言:javascript
复制
import petl as etl

table = (
        etl
            .fromcsv('QLD_Health_Care_Practices.csv')
            .convert('Practice_Name', 'upper')
            .convert('Suburb', str)
            .convert('State', str)
            .convert('Postcode', str)
    )

    +-----------------------------------+--------------------+-------+----------+
    | Practice_Name                     | Suburb             | State | Postcode |
    +===================================+====================+=======+==========+
    | 'BRISBANE CENTRE HEALTH SERVICES' | 'Brisbane-Central' | 'QLD' | '4000'   |
    +-----------------------------------+--------------------+-------+----------+
    | 'ROBERTSON FAMILY PRACTICE'       | 'Robertson'        | 'QLD' | '4109'   |
    +-----------------------------------+--------------------+-------+----------+
    | 'LOGAN VILLAGE CLINIC'            | 'Logan-Village'    | 'QLD' | '4207'   |
    +-----------------------------------+--------------------+-------+----------+
    | 'IPSWICH HEALTH CLINIC'           | 'Ipswich'          | 'QLD' | '4305'   |
    +-----------------------------------+--------------------+-------+----------+
    | 'CATTLE CREEK CLINIC'             | 'Cattle Creek'     | 'QLD' | '4407'   |
    +-----------------------------------+--------------------+-------+----------+

并希望在XML文件中的新列中添加经度和纬度。

我试图使用以下功能:

代码语言:javascript
复制
table1= (etl.fromxml('QLD_Locations.xml', 'Locations', 'qld_location', 'Suburb', 'Lat', 'Long')

但是很难理解XML语法所需的参数。

如能提供任何帮助,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-19 05:03:32

.fromxml()的“平面”参数列表只有在具有平面类型的XML结构时才能工作,其中所有数据列都具有相同的名称:

代码语言:javascript
复制
<ROOT>
  <RECORD>
    <DATA /><DATA /><DATA /><DATA /><DATA />
  </RECORD>
</ROOT>

这可以提取为

代码语言:javascript
复制
etl.fromxml('file.xml', 'RECORD', 'DATA')

要从具有不同列名或嵌套的复杂结构中提取数据,请执行以下操作:

代码语言:javascript
复制
<ROOT>
  <RECORD>
    <A /><B /><C /><D /><E />
  </RECORD>
</ROOT>

在这里,必须使用dict显式指定要提取的每个列:

代码语言:javascript
复制
etl.fromxml('file.xml', 'RECORD', {
    'Column 1': 'A',
    'Column 2': 'B',
    'Column 3': 'C',
    'Column 4': 'D',
    'Column 5': 'E',
})

其中'A‘、'B’、'C‘等是相对于XPath的RECORD表达式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52397919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档