使用 python 从 XML 中获取数据
Posted
技术标签:
【中文标题】使用 python 从 XML 中获取数据【英文标题】:Get data from XML using python 【发布时间】:2022-01-14 08:52:34 【问题描述】:我有这个 xml 文件:
<cv xmlns="http://hr.joinvision.com/xml/3_0">
<personalInformation>
<firstname>Bernard</firstname>
<lastname>Henry</lastname>
<gender>
<code>m</code>
<name>Monsieur</name>
</gender>
<title>Exec. MBA</title>
<isced>
<code>5A</code>
<name>Ma�trise universitaire ou �quivalent</name>
</isced>
<address/>
<email>negociationbhfc@gmail.com</email>
<phoneNumber>0617135919</phoneNumber>
</personalInformation>
<work>
<phase>
<dateFrom>1981-01-01+01:00</dateFrom>
<dateTo>1984-01-01+01:00</dateTo>
<dateFromFuzzy>1981</dateFromFuzzy>
<dateToFuzzy>1984</dateToFuzzy>
<duration>36</duration>
<current>false</current>
<operationArea>
<code>ass</code>
<name>Assistance</name>
<weight>1.0</weight>
</operationArea>
<operationArea>
<code>pm</code>
<name>Direction de Projet</name>
<weight>1.0</weight>
</operationArea>
<operationArea>
<code>secr</code>
<name>Bureau du Secr�taire</name>
<weight>1.0</weight>
</operationArea>
<operationArea>
<code>offi</code>
<name>Gestion du Bureau</name>
<weight>1.0</weight>
</operationArea>
<operationArea>
<code>sale</code>
<name>Ventes en G�n�ral</name>
<weight>1.0</weight>
</operationArea>
<operationArea>
<code>retai</code>
<name>Vente au D�tail</name>
<weight>0.7</weight>
</operationArea>
<topic>"TV-Vid�o"</topic>
<comments>Adjoint chef r�gional des ventes "TV-Vid�o"(CA de 60 M�)
1980-81
Attach� commercial (CA de 6 M�)</comments>
<plainText>* Soci�t� PHILIPS
1981-84
Adjoint chef r�gional des ventes "TV-Vid�o"(CA de 60 M�)
1980-81
Attach� commercial (CA de 6 M�)</plainText>
<company>PHILIPS</company>
<function>Adjoint chef</function>
<position>
<code>mgmtl</code>
<name>Chef d'�quipe</name>
</position>
<project>false</project>
</phase>
<phase>
<dateFrom>1978-01-01+01:00</dateFrom>
<dateTo>2021-12-01+01:00</dateTo>
<dateFromFuzzy>1978</dateFromFuzzy>
<dateToFuzzy>2021-12</dateToFuzzy>
<duration>516</duration>
<current>true</current>
<location>
<postcode>40210</postcode>
<city>D�sseldorf</city>
<country>
<code>DE</code>
<name>Allemagne</name>
</country>
<state>Nordrhein-Westfalen</state>
</location>
<operationArea>
<code>mark</code>
<name>Marketing</name>
<weight>1.0</weight>
</operationArea>
<industry>
<code>72</code>
<name>Recherche d�veloppement scientifique</name>
<weight>1.0</weight>
</industry>
<comments>79
Charg� de d�velopper, en Allemagne, des activit�s publi-promotionnelles en faveur de vins et alcools fran�ais</comments>
<plainText>* SOPEXA Deutschland - D�sseldorf
1978-79
Charg� de d�velopper, en Allemagne, des activit�s publi-promotionnelles en faveur de vins et alcools fran�ais</plainText>
<company>SOPEXA Deutschland</company>
<position>
<code>ma</code>
<name>Employ�</name>
</position>
<project>false</project>
</phase>
<phase>
<dateFrom>1976-01-01+01:00</dateFrom>
<dateTo>1978-01-01+01:00</dateTo>
<dateFromFuzzy>1976</dateFromFuzzy>
<dateToFuzzy>1978</dateToFuzzy>
<duration>24</duration>
<current>false</current>
<location>
<country>
<code>FR</code>
<name>France</name>
</country>
</location>
<location>
<city>New York</city>
<country>
<code>US</code>
<name>�tats-Unis</name>
</country>
</location>
<operationArea>
<code>retai</code>
<name>Vente au D�tail</name>
<weight>1.0</weight>
</operationArea>
<operationArea>
<code>adve</code>
<name>Publicit�</name>
<weight>0.7</weight>
</operationArea>
<operationArea>
<code>mark</code>
<name>Marketing</name>
<weight>0.7</weight>
</operationArea>
<operationArea>
<code>ware</code>
<name>Entreposage / Logistique des Marchandises</name>
<weight>0.7</weight>
</operationArea>
<comments>* FOOD AND WINES FROM FRANCE Inc. (SOPEXA USA) - New York
Responsable local de la mise en place de campagnes publi-promotionnelles (pour vins et fromages fran�ais) aupr�s de la distribution sur plusieurs r�gions des USA</comments>
<plainText>* FOOD AND WINES FROM FRANCE Inc. (SOPEXA USA) - New York
1976-78
Responsable local de la mise en place de campagnes publi-promotionnelles (pour vins et fromages fran�ais) aupr�s de la distribution sur plusieurs r�gions des USA</plainText>
<company>FRANCE Inc.</company>
<function>Responsable</function>
<position>
<code>ma</code>
<name>Employ�</name>
</position>
<project>false</project>
</phase>
<phase>
<dateFrom>2020-01-01+01:00</dateFrom>
<dateFromFuzzy>2020-01</dateFromFuzzy>
<subphase>false</subphase>
<current>false</current>
<comments>negociation-bhfc.f r - negociationbhfc@gmail.com - 0617135919</comments>
<plainText>Janvier 2020 - negociation-bhfc.f r - negociationbhfc@gmail.com - 0617135919</plainText>
<company>negociation-bhfc.f r</company>
<position>
<code>ma</code>
<name>Employ�</name>
</position>
<project>false</project>
</phase>
</work>
<education>
<phase>
<dateFrom>1984-01-01+01:00</dateFrom>
<dateFromFuzzy>1984</dateFromFuzzy>
<duration>12</duration>
<current>false</current>
<comments>Sciences de l'Education</comments>
<plainText>1984 Sciences de l'Education</plainText>
<completed>true</completed>
</phase>
<phase>
<dateFrom>1976-01-01+01:00</dateFrom>
<dateFromFuzzy>1976</dateFromFuzzy>
<duration>12</duration>
<current>false</current>
<operationArea>
<code>elec</code>
<name>Ing�nierie �lectrique/�lectronique</name>
<weight>1.0</weight>
</operationArea>
<comments>Dipl�me H.E.C.
Langues: Anglais courant - Allemand</comments>
<plainText>1976 Dipl�me H.E.C. Langues: Anglais courant - Allemand</plainText>
<isced>
<code>2</code>
<name>Enseignement secondaire (premier cycle)</name>
</isced>
<educationType>
<code>ed68</code>
<name>Dipl�me</name>
</educationType>
<completed>true</completed>
</phase>
<phase>
<dateFrom>1984-01-01+01:00</dateFrom>
<dateTo>2020-01-01+01:00</dateTo>
<dateFromFuzzy>1984</dateFromFuzzy>
<dateToFuzzy>2020</dateToFuzzy>
<duration>432</duration>
<current>false</current>
<location>
<postcode>75001</postcode>
<city>PARIS, HEC, PONTS Paris</city>
<country>
<code>FR</code>
<name>France</name>
</country>
<state>�le-de-France</state>
</location>
<skill>
<code>masch</code>
<name>Construction de Machines</name>
<weight>1.0</weight>
</skill>
<skill>
<code>o</code>
<name>Oracle</name>
<weight>0.9</weight>
</skill>
<skill>
<code>lawye</code>
<name>Avocat</name>
<weight>0.8</weight>
</skill>
<operationArea>
<code>sale</code>
<name>Ventes en G�n�ral</name>
<weight>1.0</weight>
</operationArea>
<operationArea>
<code>cc</code>
<name>Helpdesk/Support Technique</name>
<weight>0.7</weight>
</operationArea>
<operationArea>
<code>retai</code>
<name>Vente au D�tail</name>
<weight>0.5</weight>
</operationArea>
<operationArea>
<code>advoc</code>
<name>Carri�re Judiciaire</name>
<weight>0.4</weight>
</operationArea>
<operationArea>
<code>pm</code>
<name>Direction de Projet</name>
<weight>1.0</weight>
</operationArea>
<operationArea>
<code>cust</code>
<name>Service � la Client�le</name>
<weight>1.0</weight>
</operationArea>
<topic>" Responsable des achats "</topic>
<comments>Interventions en:
N�gociation raisonn�e/r�solution de conflit . N�gociation commerciale
Formation de formateurs/ing�nierie p�dagogique . Management
* Exemples de mission:
Formation � la n�gociation et la r�solution de conflits (en fran�ais ou en anglais) :
* de managers, ing�nieurs, chefs de projet (CNES, ONERA, INGEROP, RAZEL, DGAC)
* de vendeurs (ORACLE, VEOLIA, CASINO, BNPP)
* d'acheteurs (SG, SANOFI, LAFARGE Ciment, CASINO, C-DISCOUNT)
* d'avocats (FIDAL 2017-2018 et ETELIO 2019)
* d'�tudiants (CENTRALE PARIS, HEC, PONTS Paris Tech, MINES Paris Tech, �cole)
POLYTECHNIQUE, Corps des MINES, Corps des PONTS
Interventions
dans des projets de formation de dimension internationale et interculturelle (en fran�ais ou anglais) pour acheteurs (LAFARGE, TOTAL) ou managers (SAINT GOBAIN)
Executive MBA HEC : workshop sur la n�gociation raisonn�e (2018)
MBA sp�cialis� " Responsable des achats " de l'Institut LEONARD DE VINCI (class� 7�me)
MBA-Achats de France en 2016): formation de ces futurs acheteurs � la n�gociation raisonn�e
Interventions � l'�tranger : au Canada pour LAFARGE (acheteurs - 2001), au Gabon pour
VEOLIA (acheteurs - 2010) et au Maroc pour JESA/OCP (acheteurs - 2017-20) et SAHAM (2018)</comments>
<plainText>1984-2020
* Interventions en:
. N�gociation raisonn�e/r�solution de conflit . N�gociation commerciale
. Formation de formateurs/ing�nierie p�dagogique . Management
* Exemples de mission:
Formation � la n�gociation et la r�solution de conflits (en fran�ais ou en anglais) :
* de managers, ing�nieurs, chefs de projet (CNES, ONERA, INGEROP, RAZEL, DGAC)
* de vendeurs (ORACLE, VEOLIA, CASINO, BNPP)
* d'acheteurs (SG, SANOFI, LAFARGE Ciment, CASINO, C-DISCOUNT)
* d'avocats (FIDAL 2017-2018 et ETELIO 2019)
* d'�tudiants (CENTRALE PARIS, HEC, PONTS Paris Tech, MINES Paris Tech, �cole
POLYTECHNIQUE, Corps des MINES, Corps des PONTS)
Interventions
dans des projets de formation de dimension internationale et interculturelle (en fran�ais ou anglais) pour acheteurs (LAFARGE, TOTAL) ou managers (SAINT GOBAIN)
Executive MBA HEC : workshop sur la n�gociation raisonn�e (2018)
MBA sp�cialis� " Responsable des achats " de l'Institut LEONARD DE VINCI (class� 7�me
MBA-Achats de France en 2016): formation de ces futurs acheteurs � la n�gociation raisonn�e
Interventions � l'�tranger : au Canada pour LAFARGE (acheteurs - 2001), au Gabon pour
VEOLIA (acheteurs - 2010) et au Maroc pour JESA/OCP (acheteurs - 2017-20) et SAHAM (2018)
Bernard HENRY Formation Conseil</plainText>
<isced>
<code>3</code>
<name>Enseignement secondaire (deuxi�me cycle)</name>
</isced>
<educationType>
<code>ed55</code>
<name>�cole secondaire compr�hensive</name>
</educationType>
<schoolname>�cole POLYTECHNIQUE</schoolname>
<graduation>Executive MBA</graduation>
<graduation>Executive MBA HEC</graduation>
<graduation>MBA</graduation>
<completed>true</completed>
</phase>
</education>
<publications/>
<additionalInformation>
<language>
<code>DE</code>
<name>Allemand</name>
<level>
<code>C1</code>
<name>Courant</name>
</level>
</language>
<language>
<code>FR</code>
<name>Fran�ais</name>
</language>
<language>
<code>EN</code>
<name>Anglais</name>
</language>
<interests>DE CONSULTANT-FORMATEUR - 1984-2020
* Interventions en:
. N�gociation raisonn�e/r�solution de conflit . N�gociation commerciale
. Formation de formateurs/ing�nierie p�dagogique . Management
* Exemples de mission:
Formation � la n�gociation et la r�solution de conflits (en fran�ais ou en anglais) :
* de managers, ing�nieurs, chefs de projet (CNES, ONERA, INGEROP, RAZEL, DGAC)
* de vendeurs (ORACLE, VEOLIA, CASINO, BNPP)
* d'acheteurs (SG, SANOFI, LAFARGE Ciment, CASINO, C-DISCOUNT)
* d'avocats (FIDAL 2017-2018 et ETELIO 2019)
* d'�tudiants (CENTRALE PARIS, HEC, PONTS Paris Tech, MINES Paris Tech, �cole
POLYTECHNIQUE, Corps des MINES, Corps des PONTS)
Interventions
dans des projets de formation de dimension internationale et interculturelle (en fran�ais ou anglais) pour acheteurs (LAFARGE, TOTAL) ou managers (SAINT GOBAIN)
Executive MBA HEC : workshop sur la n�gociation raisonn�e (2018)
MBA sp�cialis� " Responsable des achats " de l'Institut LEONARD DE VINCI (class� 7�me
MBA-Achats de France en 2016): formation de ces futurs acheteurs � la n�gociation raisonn�e
Interventions � l'�tranger : au Canada pour LAFARGE (acheteurs - 2001), au Gabon pour
VEOLIA (acheteurs - 2010) et au Maroc pour JESA/OCP (acheteurs - 2017-20) et SAHAM (2018)
Bernard HENRY Formation Conseil
Janvier 2020 - negociation-bhfc.f r - negociationbhfc@gmail.com - 0617135919</interests>
</additionalInformation>
<objectives/>
<statistics>
<codeSummary>
<code>72</code>
<name>Recherche d�veloppement scientifique</name>
<weight>100.0</weight>
<duration>528</duration>
<domain>NACE</domain>
</codeSummary>
<codeSummary>
<code>o</code>
<name>Oracle</name>
<weight>67.0</weight>
<duration>433</duration>
<domain>Skill</domain>
</codeSummary>
<codeSummary>
<code>lawye</code>
<name>Avocat</name>
<weight>59.0</weight>
<duration>433</duration>
<domain>Skill</domain>
</codeSummary>
<codeSummary>
<code>masch</code>
<name>Construction de Machines</name>
<weight>74.0</weight>
<duration>433</duration>
<domain>Skill</domain>
</codeSummary>
<codeSummary>
<code>ma</code>
<name>Employ�</name>
<weight>100.0</weight>
<duration>552</duration>
<domain>Position</domain>
</codeSummary>
<codeSummary>
<code>cc</code>
<name>Helpdesk/Support Technique</name>
<weight>26.0</weight>
<duration>433</duration>
<domain>OperationArea</domain>
</codeSummary>
<codeSummary>
<code>mark</code>
<name>Marketing</name>
<weight>100.0</weight>
<duration>552</duration>
<domain>OperationArea</domain>
</codeSummary>
<codeSummary>
<code>cust</code>
<name>Service � la Client�le</name>
<weight>37.0</weight>
<duration>433</duration>
<domain>OperationArea</domain>
</codeSummary>
<codeSummary>
<code>advoc</code>
<name>Carri�re Judiciaire</name>
<weight>15.0</weight>
<duration>433</duration>
<domain>OperationArea</domain>
</codeSummary>
<codeSummary>
<code>pm</code>
<name>Direction de Projet</name>
<weight>37.0</weight>
<duration>469</duration>
<domain>OperationArea</domain>
</codeSummary>
<codeSummary>
<code>retai</code>
<name>Vente au D�tail</name>
<weight>19.0</weight>
<duration>494</duration>
<domain>OperationArea</domain>
</codeSummary>
<codeSummary>
<code>sale</code>
<name>Ventes en G�n�ral</name>
<weight>37.0</weight>
<duration>469</duration>
<domain>OperationArea</domain>
</codeSummary>
<codeSummary>
<code>DE</code>
<name>Allemagne</name>
<weight>100.0</weight>
<duration>528</duration>
<domain>ISOCountry</domain>
</codeSummary>
<codeSummary>
<code>FR</code>
<name>France</name>
<weight>74.0</weight>
<duration>458</duration>
<domain>ISOCountry</domain>
</codeSummary>
</statistics>
</cv>
我想从中获取数据,所以我使用:
def personal_infos(xml):
tree = et.fromstring(xml)
namespace = tree.xpath('namespace-uri(.)')
firstname = tree.find(".//%sfirstname" % namespace).text
lastname = tree.find(".//%slastname"% namespace).text
email = tree.find(".//%semail"% namespace).text
gender = tree.find(".//%scode"% namespace).text
phone = tree.find(".//%sphoneNumber"% namespace).text
personal_infos = ("first_name":firstname,"last_name":lastname,"gender":gender,"email":email,"phone_number":phone)
print(personal_infos)
我想知道如何创建一个循环来获取所有内容,因为在 <work>
我有很多 <phases>
我不能使用相同的代码
我需要的示例:
我需要从工作中提取所有信息(datefrom、dateto、current、operation area...)
我试过这个:
def work_infos(xml):
f = io.StringIO(xml)
tree = ET.parse(f)
root = tree.getroot()
for elem in root.iter():
for p in tree.findall('.//work//phase'):
df = tree.find('.//dateFrom')
dateTo = tree.find('.//dateTo')
它返回nothing
我是 python 新手,任何类型的指南都会有所帮助,谢谢
【问题讨论】:
您在phase
中有非唯一的子标签,因此您不能将该数据存储在字典中,因为键必须是唯一的。您希望这些数据如何?
我可以将它存储在数据框中吗??
请注意//
是Recursive Descent Operator
,//work
表示在任何地方都可以找到<work>
元素,它会忽略层次结构。 XPath cheatsheet -- 这意味着 .//work
不会让孩子进入你正在下降的树中
【参考方案1】:
其实ETree
也可以做这个任务但是我对BeautifulSoup
比较熟悉。无论如何,它们都有类似的方法来处理 XML 数据。
如果使用BeautifulSoup
,首先,使用find_all('phase')
获取工作中所有阶段的列表。然后,遍历列表并一一检索值。使用.text.strip()
获取文本节点并确保第一个和最后一个位置没有空格。将它们创建为 dict 并一一附加到列表中。最后,使用pd.DataFrame
将dict列表转换为数据框。
from bs4 import BeautifulSoup
def find_tag(tag_name):
try:
return phase.find(tag_name).text.strip()
except:
return None
xml_doc = BeautifulSoup('<your_xml>','lxml')
phases = xml_doc.find_all('phase')
phase_list = list()
for phase in phases:
phase_dict = dict()
phase_dict['datefrom'] = find_tag('datefrom')
phase_dict['dateto'] = find_tag('dateto')
phase_dict['datefromfuzzy'] = find_tag('datefromfuzzy')
phase_dict['datetofuzzy'] = find_tag('datetofuzzy')
phase_dict['duration'] = find_tag('duration')
# continue to extract next value node here
# ...
phase_list.append(phase_dict)
df = pd.DataFrame(phase_list)
print(df)
输出:
datefrom dateto datefromfuzzy datetofuzzy duration 0 1981-01-01+01:00 1984-01-01+01:00 1981 1984 36 1 1978-01-01+01:00 2021-12-01+01:00 1978 2021-12 516 2 1976-01-01+01:00 1978-01-01+01:00 1976 1978 24 3 2020-01-01+01:00 None 2020-01 None None 4 1984-01-01+01:00 None 1984 None 12 5 1976-01-01+01:00 None 1976 None 12 6 1984-01-01+01:00 2020-01-01+01:00 1984 2020 432
【讨论】:
谢谢你,这对我有用以上是关于使用 python 从 XML 中获取数据的主要内容,如果未能解决你的问题,请参考以下文章
在 spark 版本 2.2.0 中使用 python(pyspark) 从 mqtt 获取数据流
为啥使用 axios 从 XML 中获取数据会引发 cors 错误? [复制]
如何使用 python 从 flickr xml 图像数据中提取图像地理数据?