我正在使用 python pandas 和燒瓶來完成一些后處理任務(分析和可視化)。到目前為止,我通過 pd.read_csv、pd.read_xlsx 上傳/讀取 *.csv *.xlsx 和 *.xls。一切都很安靜。
現在我有一個 *.xml 檔案作為資料源,并根據我的習慣模式進行了嘗試。
所以我嘗試了:
<form action="/input" method="POST" enctype="multipart/form-data">
<input class="form-control" type="file" name="file">
<input type="submit" class="btn btn-outline-secondary" name="Preview" value ="Preview Data" > </input>
from flask import Flask, render_template,request, render_template
import pandas as pd
import xml.etree.ElementTree as ET
@app.route("/input", methods=['POST', 'GET'])
def input():
if request.method == 'POST':
if request.form['Preview'] == "Preview Data":
file = request.files['file']
filename = file.filename
if '.xml' in filename:
content = pd.read_xml(file, parser='lxml')
但是當我通過表單將 .xml 檔案傳遞??給應用程式時。我得到錯誤:
File "C:\ProgramData\MiniforgeEnvs\TestEnv\lib\site-packages\pandas\io\xml.py", line 627, in _parse_doc
with preprocess_data(handle_data) as xml_data:
AttributeError: __enter__
我嘗試檢查不同的選項:
- 當我使用 inbuild xml.etree 包時,它作業正常:
import xml.etree.ElementTree as ET
if '.xml' in filename:
tree = ET.parse(file)
root = tree.getroot()
print(root[1][0][1].attrib)
- 當我將 .xml 直接從 app 目錄加載到 pd.read_xml() 中時,它也可以正常作業:
if '.xml' in filename:
content = pd.read_xml('SampleExport.xml', parser='lxml')
- 我嘗試了不同的 prasers:“lxml”和“etree”
但是最后,當我通過 Form/input 傳遞 .xml 并使用 pd.read_xml(file,parser='lxml') 時,我從上面得到了錯誤。
uj5u.com熱心網友回復:
我剛剛解決了我的問題,盡管我不太確定為什么 pd.read_xml() 與 pd.read_csv() 或 pd.read_xlsx() 的行為不同。
pd.read_xml無法讀取 FileStorage 物件。request.file[] 傳遞的變數是類的一個實體:werkzeug.datastructures.FileStorage(stream=None, filename=None, name=None, content_type=None, content_length=None, headers=None)。
通過讀取功能,我提取了檔案本身。
filestorage = request.files['file']
file=filestorage.read()
將此傳遞給 pd.read_xml 它作業正常。
有沒有人可以解釋為什么 pd.read_xml() 的 _parse_doc() 函式無法讀取 FileStotage 型別?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/532104.html
