我在 xml 檔案中有資料,我正在閱讀 3 列:price , name , calories
xml資料
<?xml version='1.0' encoding='utf-8'?>
<data>
<row>
<index>0</index>
<price>$5.95</price>
<name>Belgian Waffles</name>
<desc>Two of our famous Belgian Waffles with plenty of real maple syrup</desc>
<calories>650</calories>
</row>
<row>
<index>1</index>
<price>$7.95</price>
<name>Strawberry Belgian Waffles</name>
<desc>Light Belgian waffles covered with strawberries and whipped cream</desc>
<calories>900</calories>
</row>
<row>
<index>2</index>
<price>$8.95</price>
<name>Berry-Berry Belgian Waffles</name>
<desc>Light Belgian waffles covered with an assortment of fresh berries and whipped cream</desc>
<calories>900</calories>
</row>
<row>
<index>3</index>
<price>$4.50</price>
<name>French Toast</name>
<desc>Thick slices made from our homemade sourdough bread</desc>
<calories>600</calories>
</row>
<row>
<index>4</index>
<price>$6.95</price>
<name>Homestyle Breakfast</name>
<desc>Two eggs, bacon or sausage, toast, and our ever-popular hash browns</desc>
<calories>950</calories>
</row>
</data>
代碼 :
import xml.etree.ElementTree as ET
parse_xml = ET.parse('/content/sample_data/xyz.xml')
get_root_element = parse_xml.getroot()
for data in get_root_element.findall('row'):
prc = data.find('price')
nm = data.find('name')
cal = data.find('calories')
temp = prc.text ',' nm.text ',' cal.text
print(temp)
上面的代碼給了我資料,但需要將此資料存盤到 csv 檔案
我如何需要為此撰寫邏輯。有沒有可能做pandas / csv
還需要將我的標題添加到該 csv 檔案中
標題:price , name , calories
uj5u.com熱心網友回復:
@kiric8494的解決方案已經足夠好了,你可以堅持下去。您也可以使用它來實作它,csv.DictWriter它會更短:
import xml.etree.ElementTree as ET
from csv import DictWriter
parse_xml = ET.parse(r"/content/sample_data/xyz.xml")
root = parse_xml.getroot()
with open(r"/content/sample_data/abc.csv", "w", newline="") as f:
writer = DictWriter(f, fieldnames=("price", "name", "calories"), extrasaction="ignore")
writer.writeheader()
writer.writerows({e.tag: e.text for e in row} for row in root)
基本上我們設定DictWriter為忽略除 之外的所有欄位price,name然后calories將生成器傳遞給key 為 tag且value 為 text.writerows()的所有子節點的構造<row>字典。
你可以幫助我的國家,查看我的個人資料資訊。
uj5u.com熱心網友回復:
感謝@ewz93 的解決方案
我已經按照以下方式完成了
import xml.etree.ElementTree as ET
import csv
parse_xml = ET.parse('/content/sample_data/xyz.xml')
get_root_element = parse_xml.getroot()
final_data_set = [] # [ [],[],[] ]
for data in get_root_element.findall('row'):
temp = []
prc = data.find('price')
nm = data.find('name')
cal = data.find('calories')
temp=[prc.text ',' nm.text ',' cal.text]
final_data_set.append(temp)
headers = ['price','name','calories']
with open('/content/sample_data/abc.csv','w') as wr:
csv_wr = csv.writer(wr)
csv_wr.writerow(headers)
for elem in final_data_set:
for item in elem:
csv_wr.writerow(item.split(','))
uj5u.com熱心網友回復:
我只是將值放在串列中并從中創建一個 DataFrame:
import xml.etree.ElementTree as ET
import pandas as pd
parse_xml = ET.parse('/content/sample_data/xyz.xml')
get_root_element = parse_xml.getroot()
prc_list = []
nm_list = []
cal_list = []
for data in get_root_element.findall('row'):
prc_list.append(data.find('price'))
nm_list.append(data.find('name'))
cal_list.append(data.find('calories'))
df = pd.DataFrame({"price": prc_list, "name": nm_list, "calories": cal_list})
df.to_excel("your_file_name.xlsx") # or if you really want a CSV use df.to_csv("your_file_name.xlsx")
這可能不是最漂亮的解決方案,因為還有pandas.read_xml()所以您可能可以通過將 XML 直接讀入 DataFrame 然后直接將其寫入 CSV 來縮短它并避免使用 etree。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/495896.html
下一篇:找不到和讀取.csv檔案
