使用 Petl 读取 XML 个文件
Reading XML files with Petl
我正在尝试将 XML 文件中的信息解析为 table 文件,该文件已使用 Petl 从另一个 CSV 文件创建,但我在使用 [=14] 的语法时遇到了问题=]函数。
XML 文件包含:
<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>
我目前有一个table:
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 文件的新列中添加经度和纬度。
我正在尝试使用以下功能:
table1= (etl.fromxml('QLD_Locations.xml', 'Locations', 'qld_location', 'Suburb', 'Lat', 'Long')
但我无法理解 XML.
语法所需的参数
任何帮助将不胜感激,在此先感谢。
.fromxml()
的 "flat" 参数列表仅在您还具有扁平类型的 XML 结构时才有效,其中所有数据列都具有相同的名称:
<ROOT>
<RECORD>
<DATA /><DATA /><DATA /><DATA /><DATA />
</RECORD>
</ROOT>
这可以提取为
etl.fromxml('file.xml', 'RECORD', 'DATA')
要从具有各种列名或嵌套的更复杂的结构中提取数据,例如:
<ROOT>
<RECORD>
<A /><B /><C /><D /><E />
</RECORD>
</ROOT>
在这里你必须使用字典明确指定你想要提取的每一列:
etl.fromxml('file.xml', 'RECORD', {
'Column 1': 'A',
'Column 2': 'B',
'Column 3': 'C',
'Column 4': 'D',
'Column 5': 'E',
})
其中'A'、'B'、'C'等都是相对于RECORD
.
的XPath表达式
我正在尝试将 XML 文件中的信息解析为 table 文件,该文件已使用 Petl 从另一个 CSV 文件创建,但我在使用 [=14] 的语法时遇到了问题=]函数。
XML 文件包含:
<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>
我目前有一个table:
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 文件的新列中添加经度和纬度。
我正在尝试使用以下功能:
table1= (etl.fromxml('QLD_Locations.xml', 'Locations', 'qld_location', 'Suburb', 'Lat', 'Long')
但我无法理解 XML.
语法所需的参数任何帮助将不胜感激,在此先感谢。
.fromxml()
的 "flat" 参数列表仅在您还具有扁平类型的 XML 结构时才有效,其中所有数据列都具有相同的名称:
<ROOT>
<RECORD>
<DATA /><DATA /><DATA /><DATA /><DATA />
</RECORD>
</ROOT>
这可以提取为
etl.fromxml('file.xml', 'RECORD', 'DATA')
要从具有各种列名或嵌套的更复杂的结构中提取数据,例如:
<ROOT>
<RECORD>
<A /><B /><C /><D /><E />
</RECORD>
</ROOT>
在这里你必须使用字典明确指定你想要提取的每一列:
etl.fromxml('file.xml', 'RECORD', {
'Column 1': 'A',
'Column 2': 'B',
'Column 3': 'C',
'Column 4': 'D',
'Column 5': 'E',
})
其中'A'、'B'、'C'等都是相对于RECORD
.