Преобразовать часть данных, включенных в файл XML, в файл CSV - PullRequest
0 голосов
/ 06 ноября 2019

Я хотел бы преобразовать файл XML в файл CSV на python. Ниже я прилагаю фотографию XML-файла hom, которая выглядит следующим образом, и я хотел бы, чтобы для каждого идентификатора (например, PZH01_MST_0690_00) был взят минимальный трафик Traffic, в данном случае это будет: 60. Может ли кто-нибудь мне помочь? Я думаю, что люди с большим опытом могут сделать это довольно легко. По сути, я хочу преобразовать этот XML-файл в CSV-файл и иметь 2 столбца (1 с идентификатором и 2 с самым низким значением TrafficFlow). Любая помощь будет высоко ценится, спасибо!

<?xml version="1.0" encoding="UTF-8"?>

-<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">


-<SOAP:Body>


-<d2LogicalModel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" modelBaseVersion="2" xmlns="http://datex2.eu/schema/2/2_0">


-<exchange>


-<supplierIdentification>

<country>nl</country>

<nationalIdentifier>NLNDW</nationalIdentifier>

</supplierIdentification>

</exchange>


-<payloadPublication lang="nl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="MeasuredDataPublication">

<publicationTime>2019-10-31T11:12:42.005Z</publicationTime>


-<publicationCreator>

<country>nl</country>

<nationalIdentifier>NLNDW</nationalIdentifier>

</publicationCreator>

<measurementSiteTableReference targetClass="MeasurementSiteTable" version="1139" id="NDW01_MT"/>


-<headerInformation>

<confidentiality>noRestriction</confidentiality>

<informationStatus>real</informationStatus>

</headerInformation>


-<siteMeasurements xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<measurementSiteReference targetClass="MeasurementSiteRecord" version="6" id="PZH01_MST_0690_00"/>

<measurementTimeDefault>2019-10-31T11:11:00Z</measurementTimeDefault>


-<measuredValue index="1">


-<measuredValue>


-<basicData xsi:type="TrafficFlow">


-<vehicleFlow>

<vehicleFlowRate>720</vehicleFlowRate>

</vehicleFlow>

</basicData>

</measuredValue>

</measuredValue>


-<measuredValue index="2">


-<measuredValue>


-<basicData xsi:type="TrafficFlow">


-<vehicleFlow>

<vehicleFlowRate>60</vehicleFlowRate>

</vehicleFlow>

</basicData>

</measuredValue>

</measuredValue>


-<measuredValue index="3">


-<measuredValue>


-<basicData xsi:type="TrafficFlow">


-<vehicleFlow>

<vehicleFlowRate>60</vehicleFlowRate>

</vehicleFlow>

</basicData>

</measuredValue>

</measuredValue>


-<measuredValue index="4">


-<measuredValue>


-<basicData xsi:type="TrafficFlow

1 Ответ

1 голос
/ 07 ноября 2019

Я предлагаю вам использовать python-benedict, это подкласс dict, который поддерживает операции ввода-вывода из / в большинство распространенных форматов, включая xml и csv.

Установка: pip install python-benedict

Документация: https://github.com/fabiocaccamo/python-benedict

from benedict import benedict as bdict

# xml data-string, or xml filepath or xml url
xml_data = ''

d = bdict.from_xml(xml_data)
d.standardize()

# print the current dict to check it
print(d.dump())

# now convert it to csv:

# keypath (using the dot syntax) to the item that is a list of dicts
items_keypath = 'path.to.list.of.dicts'

# define filepath if you need to save csv to disk
csv_filepath = None

csv_data = d.to_csv(key=items_keypath, filepath=csv_filepath)
print(csv_data)

Очень просто:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...