
这里的PythonAnywhere开发人员。总的来说,这是关于Flask和Web开发的一个好问题,而不是特定于我们的系统,因此,我将尝试给出一个通用的答案,而无需任何特定于我们的内容:-)
为了确定您的问题,我需要知道几件事,因此,我将从列出我正在做的假设入手-如果我对任何假设有误,请给我评论。我将适当地更新答案。
- 我假设您要上传的文件不是很大,并且可以容纳合理的内存量-假设小于一兆字节。
- 我假设您已经编写了从文本文件生成CSV的程序,并且该程序具有(或者可能更容易更改为具有)一个函数,该函数需要包含以下内容的字符串:文本文件的内容,并返回需要写入CSV的内容。
如果同时存在这两种情况,那么构造Flask应用程序的最佳方法就是处理Flask中的所有内容。一个代码示例值一千个单词,因此,我整理了一个简单的示例,允许用户上传文本文件,并通过一个名为的函数运行它
transform(这是转换程序中的函数插入的位置-
我的替换
=为
,整个文件),然后将结果发送回浏览器。
在PythonAnywhere上有此应用程序的实时版本。
from flask import Flask, make_response, requestapp = 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().depre("utf-8") result = transform(file_contents) response = make_response(result) response.headers["Content-Disposition"] = "attachment; filename=result.csv" return response关于您的其他问题:
- 模板:在本示例中,我没有使用模板,因为我希望所有模板都可以放入单个代码中。如果我做得正确,则可以将
form
视图生成的内容放入模板中,仅此而已。 - 您可以通过写入文件来做到这一点吗?是的,可以,并且可以使用我正在使用属性的对象上的
save(
filename)
方法保存上载的文件。但是,如果您的文件很小(按照我上面的假设),那么像上面的代码那样在内存中处理它们可能更有意义。file``stream
希望对您有所帮助,如果您有任何疑问,请发表评论。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)