Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Flask通过浏览器加载txt文件并访问其数据进行处理_Python_Flask - Fatal编程技术网

Python 使用Flask通过浏览器加载txt文件并访问其数据进行处理

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">

我正在制作一个数据可视化工具,从用户那里获取输入(在计算机上选择一个文件);用Python和Pandas、Numpy等处理它;并在本地服务器上的浏览器中显示数据

使用HTML输入表单选择文件后,访问数据时遇到问题

HTML格式:

<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