首页 > 解决方案 > 使用 Python、Pandas 和/或 Jinja2 将原始 csv 数据合并到 html 模板中的干净代码

问题描述

带有 RAW CSV 数据字段的 HTML 模板:

<body>
<pre id="csv" style="display: none">
{{ RAW CSV DATA }}
</pre>
</body>

这个简短的教程展示了如何读取模板并呈现一个新的 html,但不展示如何将输出保存为另一个文件,例如“result.html”。

https://techmonger.github.io/69/jinja2-render-html/

目前使用 Pandas 处理 RAW CSV DATA 并将其写入名为“test.csv”的文件:

import numpy as np
import pandas as pd

# Ticker data
input_file = 'tick.csv'

# Read csv input file Date, Adj_high, Adj_low into Pandas dataframe
df = pd.read_csv(input_file, usecols=[0,9,10], 
            parse_dates=['DATE'], date_parser = pd.to_datetime)

# Write DATE, ADJ_HIGH, ADJ_LOW to csv file
df.to_csv('test.csv', index=False)

包含 RAW CSV 数据的文件“test.csv”示例:

DATE,ADJ_HIGH,ADJ_LOW
2018-04-27,164.33,160.63
2018-04-30,167.26,161.84
2018-05-01,169.20,165.27
2018-05-02,177.75,173.80
2018-05-03,177.50,174.44

如果可能的话,如何使用 Pandas 将 RAW CSV DATA 写入 html 模板?或者,如何使用 Python/Pandas(有或没有 Jinja2)来读取 test.csv 文件并将其写入“pre”标签之间的 HTML 模板中?

生成的 HTML 文件如下所示:

<body>
<pre id="csv" style="display: none">
DATE,ADJ_HIGH,ADJ_LOW
2018-04-27,164.33,160.63
2018-04-30,167.26,161.84
2018-05-01,169.20,165.27
2018-05-02,177.75,173.80
2018-05-03,177.50,174.44
</pre>
</body>

标签: pythonhtmlpandascsvjinja2

解决方案


正如亨利埃克所评论的那样,to_csv没有位置参数只返回字符串,所以..

import jinja2

t = jinja2.Template('<pre>{{ raw_csv_data }}</pre>')
csv_data = df.to_csv(index=False)
html_string = t.render(raw_csv_data=csv_data)

推荐阅读