Python 如何使用flask有效地将大型csv文件加载到html表中?
我想知道使用flask(我是flask初学者)将csv数据(超过60000行)加载到html表中的最佳实践是什么 我可以将数据加载到html表中,但在我的浏览器中加载页面需要很长时间。有人能为我的场景推荐一个更好、更健壮的解决方案吗?提前谢谢你 到目前为止,我的代码是:Python 如何使用flask有效地将大型csv文件加载到html表中?,python,html,csv,flask,jinja2,Python,Html,Csv,Flask,Jinja2,我想知道使用flask(我是flask初学者)将csv数据(超过60000行)加载到html表中的最佳实践是什么 我可以将数据加载到html表中,但在我的浏览器中加载页面需要很长时间。有人能为我的场景推荐一个更好、更健壮的解决方案吗?提前谢谢你 到目前为止,我的代码是: app.py: @app.route('/') def weather_dashboard(): filename = '/path/to/my/data.csv' data = pandas.read_csv(
app.py
:
@app.route('/')
def weather_dashboard():
filename = '/path/to/my/data.csv'
data = pandas.read_csv(filename, header=0)
myData = list(data.values)
return render_template('home.html', myData=myData)
home.html
:
日期
身份证件
项目
售出物品
{%表示myData%中的值}
{{value[0]}
{{value[1]}
{{value[2]}
{{value[3]}
{%endfor%}
提前谢谢 尝试使用pandas.to_html:
@app.route('/')
def weather_dashboard():
filename = '/path/to/my/data.csv'
data = pandas.read_csv(filename, header=0)
data.columns=['date','ID','Items','Sold Items']
data.to_html(open('data.html', 'w'))
return render_template('data.html')
这里有一种以资源使用率(RAM)为代价提高性能的方法。它将仅在文件的内容哈希更改时更新
导入csv
导入hashlib
从pathlib导入路径
进口烧瓶
类缓存:
模板=“”
{数据%中的v为%1}
{{v[0]}
{{v[1]}
{{v[2]}
{{v[3]}
{%endfor%}
'''
csv\u file=路径(\uuuuu file\uuuuu).parent/'data.csv'
定义初始(自身,应用:烧瓶。烧瓶):
self.\u app=app
self.\u cache=None
self.\u filehash=None
self()#首次初始化
定义呼叫(自我):
filehash=self.\u hash\u file()
如果文件哈希!=self.\u文件哈希:
self.\u filehash=filehash
self.\u cache=self.\u render()
返回自缓存
def_散列文件(self)->str:
使用self.csv_file.open('rb')作为f:
md5=hashlib.md5()
而数据:=f.read(65536):#64kb块
md5.更新(数据)
返回md5.hexdigest()
def_渲染(自):
使用self.csv_file.open(换行符=“”)作为f:
读卡器=csv。读卡器(f)
下一个(读卡器)#跳过标题
使用self.\u app.app\u context():
返回烧瓶。呈现模板字符串(self.template,data=reader)
app=烧瓶。烧瓶(\uuuuu名称\uuuuuuu)
缓存=缓存(应用程序)
@应用程序路径(“/”)
def weather_仪表板():
return flask.render_模板('home.html',table_body=cache())
按照以下代码更改你的app.py
@app.route('/')
def weather_dashboard():
filename = '/path/to/my/data.csv'
data = pandas.read_csv(filename, header=0)
myData = data.values
return render_template('home.html', myData=myData)
csv是否会改变?您可以创建一个支持分页的api端点(例如接受偏移量和限制),并将html页面动态分块延迟加载(
axios
,async api
,等等)@Maximilian,行数是,但是列总是一样的。@baobab 1988您是否使用csv
作为某种形式的数据库?或者它在你的应用程序外部发生了变化?“用户将能够通过它进行搜索或过滤”我将专注于为查询和过滤提供一个良好的用户界面;没有人会在页面上滚动浏览60K行。注意,您仍然需要为大型结果集提供分页。将数据存储在数据库中。