Python 使用Flask通过浏览器加载txt文件并访问其数据进行处理
我正在制作一个数据可视化工具,从用户那里获取输入(在计算机上选择一个文件);用Python和Pandas、Numpy等处理它;并在本地服务器上的浏览器中显示数据 使用HTML输入表单选择文件后,访问数据时遇到问题 HTML格式:Python 使用Flask通过浏览器加载txt文件并访问其数据进行处理,python,flask,Python,Flask,我正在制作一个数据可视化工具,从用户那里获取输入(在计算机上选择一个文件);用Python和Pandas、Numpy等处理它;并在本地服务器上的浏览器中显示数据 使用HTML输入表单选择文件后,访问数据时遇到问题 HTML格式: <form action="getfile" method="POST" enctype="multipart/form-data"> Project file path: <input type="file" name="myfile">
<form action="getfile" method="POST" enctype="multipart/form-data">
Project file path: <input type="file" name="myfile"><br>
<input type="submit" value="Submit">
</form>
这将返回“浏览器(或代理)发送了此服务器无法理解的请求”错误。我尝试了许多不同的方法将数据从文件中取出,然后简单地打印到屏幕上开始,并收到了一系列错误,包括“TypeError:“FileStorage”对象不可调用“ImmutableMultiDict”对象不可调用”。任何关于如何正确执行此任务的指针都是值得赞赏的。A
input type=file
数据不会作为请求对象的表单
字典传入。它作为request.files
(请求对象中的文件字典)传入
因此,只要改变:
result = request.form['myfile']
到
试试这个。过去几天我一直在保存和解压缩文件。如果您对此代码有任何问题,请告诉我:) 我建议将文件保存在磁盘上,然后读取它。如果你不想那样做,你就不必了
from flask import Flask, render_template, request
from werkzeug import secure_filename
@app.route('/getfile', methods=['GET','POST'])
def getfile():
if request.method == 'POST':
# for secure filenames. Read the documentation.
file = request.files['myfile']
filename = secure_filename(file.filename)
# os.path.join is used so that paths work in every operating system
file.save(os.path.join("wherever","you","want",filename))
# You should use os.path.join here too.
with open("wherever/you/want/filename") as f:
file_content = f.read()
return file_content
else:
result = request.args.get['myfile']
return result
正如zvone在评论中所建议的,我也建议不要使用GET来上传文件
编辑:- 您不想保存该文件 上载的文件存储在内存中或文件系统上的临时位置。您可以通过查看请求对象上的“文件”属性来访问这些文件。每个上传的文件都存储在该词典中。它的行为类似于标准的Python文件对象,但它还有一个save()方法,允许您将该文件存储在服务器的文件系统中 我是从烧瓶文件里找到的。由于它是一个Python文件,您可以直接在其上使用
file.read()
,而无需file.save()
另外,如果您需要将其保存一段时间,然后在以后删除,则可以使用
os.path.remove
在保存后删除该文件 试着退回其他东西,看看是否有效。我相信result=request.form['myfile']
部分应该可以工作。此外,甚至不要尝试使用GET来支持上传文件。这是行不通的。谢谢你澄清这一点!但是,我尝试了此操作并收到以下错误:“TypeError:'FileStorage'对象不可调用”@KHutch,因为您不能将文件对象作为视图响应返回。您需要读取它并从查看函数getfile
返回有效响应。尝试类似于return result.filename
的方法来测试上传是否有效。我得到“AttributeError:module'request'没有属性'form'”。我得到了类似的文件错误。还有其他解决方案吗?谢谢,这非常有效!我将使用POST;在故障排除过程中,我抛出了GET。由于该文件将保存在本地计算机上,我想我不会再使用此程序保存它,除非它有好处-我只需要访问其中的文本。我真的很感激你明确的回答!
result = request.files['myfile']
from flask import Flask, render_template, request
from werkzeug import secure_filename
@app.route('/getfile', methods=['GET','POST'])
def getfile():
if request.method == 'POST':
# for secure filenames. Read the documentation.
file = request.files['myfile']
filename = secure_filename(file.filename)
# os.path.join is used so that paths work in every operating system
file.save(os.path.join("wherever","you","want",filename))
# You should use os.path.join here too.
with open("wherever/you/want/filename") as f:
file_content = f.read()
return file_content
else:
result = request.args.get['myfile']
return result