我正在开发一个网络应用程序,用户将在其中上传一个 .csv 文件,该文件在下一页上呈现为 html。然后,需要在下一页上使用相同的 .csv 文件(或导入它的 pandas 数据框)。所以我需要在@app.route
s 之间移动这个对象。我的理解是这session
是在 Flask 中执行此操作的正确方法。但是,会话要求对象被序列化。
这很好,除了将 json 转换回 pandas 时,会删除下划线。显然这是因为它被视为_
扮演逗号角色的数字对象,并且开发人员表示他们不打算为此提供修复程序。
我做了一个简单的应用程序来演示这个问题:
控制器.py
#!/usr/bin/env python3
import pandas as pd
from flask import Flask, render_template, session
import os
app = Flask(__name__)
app.secret_key = os.urandom(28)
@app.route('/first_page', methods=['GET', 'POST'])
def first_page():
d = {'products': ['pencils', 'pens', 'erasers'], 'id_code': ['1_2', '10_7', '12_11']}
df = pd.DataFrame(d)
print(df)
session["data"] = df.to_json()
return render_template('/private/test_page1.html')
@app.route('/second_page', methods=['GET', 'POST'])
def second_page():
dat = session.get('data')
dat = pd.read_json(dat)
print(dat)
return render_template('/private/test_page2.html')
if __name__ == '__main__':
app.run(port=5001,debug=True)
控制台中的输出,从中可以看到下划线已被删除。
products id_code
0 pencils 1_2
1 pens 10_7
2 erasers 12_11
127.0.0.1 - - [01/Apr/2019 22:49:27] "GET /first_page HTTP/1.1" 200 -
products id_code
0 pencils 12
1 pens 107
2 erasers 1211
127.0.0.1 - - [01/Apr/2019 22:49:28] "POST /second_page HTTP/1.1" 200 -
那么,有没有比简单地“在导入之前从我的数据中删除所有下划线”更好的解决方案?我可以这样做,但这会很痛苦,因为我已经编写的其他代码需要下划线的数据。
编辑:如果我在那里也有空值怎么办?我可以完全避免使用 json 吗?