我正在學習python,現在我需要一點幫助。我有一個來自soap api的XML檔案,但我無法將其轉換為CSV。我設法用請求庫輕松獲得資料。我的困難在于將其轉換為CSV,我最終得到的是沒有任何值的標題
。我的XML資料 :
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"_span>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"。
xmlns:xsd="http://www.w3.org/2001/XMLSchema"/span>>
<soap:Body>/span>
<Level2 xmlns="https://xxxxxxxxxx/xxxxxxx"/span>>
<Level3>/span>
<ResponseStatus>/span>Success</ResponseStatus>/span>
<ErrorMessage/>/span>
<Message>本期產生20個警報</Message>/span>
<ProcessingTimeSecs>0.8821768999993</ProcessingTimeSecs>/span>
<Something1>1</Something1>
<Something2/>/span>
<Something3/>/span>
<Something4/>/span>
<VIP>/span>
<MainVIP>/span>
<Date>/span>20210616</Date>
<RegisteredDate>20210216</RegisteredDate>/span>
<Type>/span>YMBA</Type>/span>
<TypeDescription>TYPE OF ENQUIRY</TypeDescription>
<BusinessName>/span>COMPANY NAME</BusinessName>/span>
<ITNumber>/span>987654321</ITNumber>
<RegistrationNumber>123456789</RegistrationNumber>
<SubscriberNumber>55889977</SubscriberNumber>
<SubscriberReference/>/span>
<TicketNumber>1122336655</TicketNumber>
<SubscriberName>COMPANY NAME 2 </SubscriberName>/span>
<CompletedDate>/span>20210615</CompletedDate>
</MainVIP>/span>
</VIP>/span>
<Something5/>/span>
<Something6/>/span>
<Something7/>/span>
<Something8/>/span>
<Something9/>/span>
<PrincipalSomething10/>/span>
<PrincipalSomething11/>/span>
<PrincipalSomething12/>/span>
<PrincipalSomething13/>/span>
<Something14/>/span>
<Something15/>/span>
<Something16/>/span>
<Something17/>/span>
<Something18/>/span>
<PrincipalSomething19/>/span>
<PrincipalSomething20/>/span>
</Level3>/span>
</Level2>/span>
</soap:Body>/span>
</soap:Envelope>/span>
我的python代碼是這樣的:
import xml.etree.ElementTree as ET
import pandas as pd
cols = ['Date'/span>, 'RegisteredDate'/span>, 'Type'/span>,
'TypeDescription'] 。
rows = []
#決議xml檔案
xmlparse = ET.parse('xmldata.xml'/span>)
root = xmlparse.getroot()
for i in root:
Date = i.get('Date').text
RegisteredDate = i.get('RegisteredDate').text
Type = i.get('Type').text
TypeDescription = i.get('TypeDescription').text
rows.append({'Date': 日期。
'RegisteredDate': 注冊日期。
'Type': 型別。
'TypeDescription': TypeDescription})
df = pd.DataFrame(rows, columns=cols)
print(df)
df.to_csv('csvdata.csv'/span>)
在我的方法中,我是按照這里的想法https://www.geeksforgeeks.org/convert-xml-to-csv-in-python/
uj5u.com熱心網友回復:
你可能不需要通過ElementTree,你可以直接將xml送入pandas。 如果我沒有理解錯的話,這應該是這樣做的:
df = pd.read_xml(path_to_file,"//*[local-name()='MainVIP']"/span>)
df = df.iloc[:,:4] 。
df
從你上面的xml輸出:
Date RegisteredDate Type TypeDescription
0 20210616 20210216 YMBA TYPE OF ENQIRY
uj5u.com熱心網友回復:
沒有任何外部lib--下面的代碼可以生成一個csv檔案。
這個想法是要從MainVip中收集所需的元素資料,并將其存盤在dicts的串列中。在串列中回圈并將資料寫入一個檔案。
import xml.etree.ElementTree as ET
xml = ''' <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"/span>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"。
xmlns:xsd="http://www.w3.org/2001/XMLSchema"/span>>
<soap:Body>/span>
<Level2 xmlns="https://xxxxxxxxxx/xxxxxxx"/span>>
<Level3>/span>
<ResponseStatus>/span>Success</ResponseStatus>/span>
<ErrorMessage/>/span>
<Message>本期產生20個警報</Message>/span>
<ProcessingTimeSecs>0.8821768999993</ProcessingTimeSecs>/span>
<Something1>1</Something1>
<Something2/>/span>
<Something3/>/span>
<Something4/>/span>
<VIP>/span>
<MainVIP>/span>
<Date>/span>20210616</Date>
<RegisteredDate>20210216</RegisteredDate>/span>
<Type>/span>YMBA</Type>/span>
<TypeDescription>TYPE OF ENQUIRY</TypeDescription>
<BusinessName>/span>COMPANY NAME</BusinessName>/span>
<ITNumber>/span>987654321</ITNumber>
<RegistrationNumber>123456789</RegistrationNumber>
<SubscriberNumber>55889977</SubscriberNumber>
<SubscriberReference/>/span>
<TicketNumber>1122336655</TicketNumber>
<SubscriberName>COMPANY NAME 2 </SubscriberName>/span>
<CompletedDate>/span>20210615</CompletedDate>
</MainVIP>/span>
</VIP>/span>
<Something5/>/span>
<Something6/>/span>
<Something7/>/span>
<Something8/>/span>
<Something9/>/span>
<PrincipalSomething10/>/span>
<PrincipalSomething11/>/span>
<PrincipalSomething12/>/span>
<PrincipalSomething13/>/span>
<Something14/>/span>
<Something15/>/span>
<Something16/>/span>
<Something17/>/span>
<Something18/>/span>
<PrincipalSomething19/>/span>
<PrincipalSomething20/>/span>
</Level3>/span>
</Level2>/span>
</soap:Body>/span>
</soap:Envelope>/span>''
cols = ['日期', '注冊日期', '型別',
'TypeDescription']
rows = []
NS = '{https://xxxxxxxxxx/xxxxxxx}'
根 = ET.fromstring(xml)
for vip in root.findall(f'.//{NS}MainVIP):
rows.append({c: vip.find(NS c).text for c in cols})
with open('out.csv','w') as f:
f.write(','.join(cols) ')
')
for row in rows:
f.write(','.join(row[c] for c in cols) ' ') for row in rows: f.write(','.join(row[c] for c in cols) ' ')
')
out.csv
Date,RegisteredDate,Type, TypeDescription
20210616,20210216,YMBA,TYPE OF ENQIRY
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/332445.html
標籤:
