python - 从字符串变量中读取并使用 Python Flask 上传 .txt 文件?
问题描述
我正在尝试使用 Python 和 Flask 构建一个 Web 应用程序以将 .JSON 转换为 .CSV 格式。
这是它应该如何工作的。该应用程序以编程方式从 API 下载 JSON 文件,我需要转换为 .CSV 格式,当用户访问链接时,它应该将 JSON 转换为 .CSV 并且应该自动下载并将其保存在用户的本地磁盘中。
最初,我的方法是在服务器本地磁盘中下载 JSON 文件,并通过创建一个新文件并将其转换为 CSV 文件,并使用 send_file,用户可以下载 CSV 文件。
但是,自从我部署到 Heroku 中后,我意识到 Heroku 文件系统是临时的,我无法存储任何文件。我不得不更改文件概念并通过将其存储到字符串变量来进行转换。
这就是我的代码在部署到 heroku 后的样子。
from flask import Flask,render_template,send_file
import requests
import os
import csv
import json
#import urllib.request
app = Flask(__name__,template_folder='templates')
@app.route('/')
def index():
return render_template('index.html')
@app.route('/jsonParser')
def jsonParser():
download_url = "https://www....." #link to .JSON file.
r = requests.get(download_url)
x = json.loads(r.content)
outputArray = ["id", "phones", "email", "firstname", "lastname","role","username","isActive","_created_at","_updated_at"]
output = ','.join(outputArray)
try:
idValue = x["id"] or x["_id"]
idValue = str(idValue)
except:
idValue = x["_id"] or "nil"
output2 = ",".join([ idValue ,
x["phones"] or "nil",
x["email"] or "nil",
x["firstname"] or "nil",
x["lastname"] or "nil",
str(x["role"]) or "nil",
x["username"] or "nil",
str(x["isActive"]) or "nil" ,
str(x["_created_at"]) or "",
str(x["_updated_at"]) or ""])
output = output + "<br>" + output2 #'\n'.join([output, output2])
return output
if __name__ == "__main__":
app.run(debug=True,threaded=True)
所以现在,该output
变量由转换后的 .CSV 组成。我想知道是否有任何方法可以将其转换为 .txt 文件,以便用户可以通过访问 /jsonParser 下载它,而无需将 .txt 文件存储在服务器端。
解决方案
那是你想做的吗?你可以这样尝试吗:
from io import StringIO
from flask import Response
@app.route('/jsonParser')
def jsonParser():
...
output = output + "<br>" + output2 # '\n'.join([output, output2])
string_out = StringIO()
string_out.write(output)
returnfile = string_out.getvalue()
return Response(returnfile, mimetype="text/plain", headers={"Content-disposition": "attachment; filename=output.txt"})
推荐阅读
- jmeter - JMeter 4.0不传递后参数名称,
- s4sdk - 通过 API_MATERIAL_DOCUMENT_SRV 发布 311 运动
- c# - 具有基于列表的属性的 C# 相等性
- javascript - 如果 URL 包含字符串 A 但不包含字符串 B,则重定向
- iis-6 - IIS:服务没有及时响应启动或控制请求。(2147943453, 8007041d)
- penetration-testing - 使用 burp 套件的 Web 应用程序
- javascript - cordova ios iphone x - 顶部0的固定元素不显示在最顶部
- python - 如何对在 __init__ 方法之外初始化的实例变量进行单元测试
- r - 基于包含 tidyverse 类别的其他两列创建新变量
- powershell - 如何查询不同域中的 AD 用户