我正在尝试使用PythonAnywhere和Flask编写一个非常简单的Web应用程序,该应用程序可以让用户上传文本文件,生成一个csv文件,然后让用户下载csv文件。不必花哨,只需工作即可。我已经编写了从驱动器上的txt文件生成csv的程序。
现在,我的函数使用以下命令在驱动器上打开文件:
with open(INPUTFILE, "r") as fname:
并使用以下代码编写csv:
with open(OUTPUTFILE, 'w') as fname:
其中INPUTFILE和OUTPUTFILE是文件名字符串。
对我来说,将文件作为对象处理,由flask / html以某种方式返回会更好吗?
我不知道该怎么做。我应该如何构造该程序?我需要几个HTML模板?我宁愿在不将文件保存到任何地方的情况下进行处理,但是如果必须将它们保存到PythonAnywhere目录中,则可以。我怎样才能做到这一点?
这里的PythonAnywhere开发人员。总的来说,这是关于Flask和Web开发的一个好问题,而不是特定于我们的系统,因此,我将尝试给出一个通用的答案,而无需任何特定于我们的内容:-)
为了确定您的问题,我需要知道几件事,因此,我将从列出我正在做的假设入手-如果我对任何假设有误,请给我评论。我将适当地更新答案。
如果同时存在这两种情况,那么构造Flask应用程序的最佳方法就是处理Flask中的所有内容。一个代码示例值一千个单词,因此,我整理了一个简单的示例,允许用户上传文本文件,并通过一个名为的函数运行它transform(这是转换程序中的函数插入的位置- 我的替换=为,整个文件),然后将结果发送回浏览器。 在PythonAnywhere上有此应用程序的实时版本。
transform
=
,
from flask import Flask, make_response, request app = Flask(__name__) def transform(text_file_contents): return text_file_contents.replace("=", ",") @app.route('/') def form(): return """ <html> <body> <h1>Transform a file demo</h1> <form action="/transform" method="post" enctype="multipart/form-data"> <input type="file" name="data_file" /> <input type="submit" /> </form> </body> </html> """ @app.route('/transform', methods=["POST"]) def transform_view(): request_file = request.files['data_file'] if not request_file: return "No file" file_contents = request_file.stream.read().decode("utf-8") result = transform(file_contents) response = make_response(result) response.headers["Content-Disposition"] = "attachment; filename=result.csv" return response
关于您的其他问题:
form
save(
)
file``stream
希望对您有所帮助,如果您有任何疑问,请发表评论。