【发布时间】:2020-04-06 05:04:52
【问题描述】:
我正在使用 Flask,我想使用 Jinja2 模板生成 csv 文件。根据 Jinja2 文档
Jinja 模板只是一个文本文件。 Jinja 可以生成任何基于文本的格式(HTML、XML、CSV、LaTeX 等)。 Jinja 模板不需要有特定的扩展名:.html、.xml 或任何其他扩展名都可以。
问题在于 Jinja2 非常擅长插入空格和换行符,这些会破坏 csv 输出,它应该只是一个记录文件,每个记录都是逗号分隔值的列表。
我需要使用 Jinja2 而不是 csv 模块,因为我需要的所有数据都已经存储在一个旨在提供给 Jinja2 的数据对象中(我通常生成 HTML,但有时生成 JSON,现在我想生成 csv)。
这是我的模板,注意 dp 是一个“数据页”对象,包含标题和值。
{% set g = namespace(comm0 = '', comma = '') %}
{# Header #}
{% for ix in range(dp.field_count) -%}
{{ g.comm0 }}
"{{ dp.fields[ix].label }}"
{% set g.comm0 = ', ' %}
{%- endfor %}
{# Rows #}
{% for record in dp.records -%}
{% set g.comma = '' %}
{% for ix in range(dp.field_count) -%}
{{ g.comma }}
"{{ record.row[ix].value }}"
{% set g.comma = ', ' %}
{%- endfor %}
{%- endfor %}
这是输出的样子(已经使用 - 符号消除了一些空格)。
"Staff Type"
,
"Item"
,
"Billable?"
,
"Description"
,
"Hourly Rate"
,
"Date Changed"
,
"Tag"
"AC"
,
""
,
"-1"
,
"Associate Consultant"
,
"20"
,
""
,
""
"ACS"
,
""
,
"-1"
,
"Consultant"
,
"29"
,
""
,
""
"ADMIN"
,
""
,
"0"
,
"Administration"
,
"20"
,
""
,
""
这就是 csv 的样子。
"Staff Type" , "Item" , "Billable?" , "Description" , "Hourly Rate" , "Date Changed", "Tag"
"AC", "", "-1", "Associate Consultant", "20", "", ""
"ACS", "", "-1", "Consultant", "29", "", ""
"ADMIN", "", "0", "Administration", "20", "", ""
那么如何消除记录中的换行符,并在每条记录的末尾放置一个换行符,并去除剩余的不必要的空白。
【问题讨论】: