Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用flask有效地将大型csv文件加载到html表中?_Python_Html_Csv_Flask_Jinja2 - Fatal编程技术网

Python 如何使用flask有效地将大型csv文件加载到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(

我想知道使用flask(我是flask初学者)将csv数据(超过60000行)加载到html表中的最佳实践是什么

我可以将数据加载到html表中,但在我的浏览器中加载页面需要很长时间。有人能为我的场景推荐一个更好、更健壮的解决方案吗?提前谢谢你

到目前为止,我的代码是:

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行。注意,您仍然需要为大型结果集提供分页。将数据存储在数据库中。