Я пытаюсь использовать jinja2 для преобразования файла Excel CSV в шаблон уценки Confluence.В основном это работает, но по какой-то причине в CSV-файле есть 2 столбца, которые не заполняются.Это означает, что заголовки столбцов вставляются в выходной шаблон, но не в текст из этих столбцов.И я не уверен, как попробовать и отладить скрипт jinja2, чтобы понять, почему он не работает (я новичок в кодировании и python)
Я делюсь скриптом python и шаблоном Confluence jinja2, что ониспользует.Извиняюсь, если это слишком много кода, чтобы поделиться.Просто ищите указатели на то, как устранить неполадки или изолировать, где в скрипте и / или шаблоне может возникнуть эта проблема.
Столбцы, которые не заполняются из CSV в файл уценки Confluence, представляют собой «Обоснование» и«Исправление».
Я проверил CSV-файл в Excel, чтобы увидеть, было ли что-то другое в этих 2 столбцах, и скопировал форматирование ячеек из рабочих столбцов в 2 столбца, но, похоже, это не помогло..
Вот скрипт jinja2:
from jinja2 import Environment, FileSystemLoader
import pandas as pd
import os
import sys
reload(sys)
sys.setdefaultencoding('utf8')
# Capture our current directory
THIS_DIR = os.path.dirname(os.path.abspath(__file__))
file = sys.argv[1]
df = pd.read_csv(file)
df = df.fillna('N/A')
appendix_df = df[df['Keep/Add/Appendix'] == 'Appendix']
applied = df[df['Keep/Add/Appendix'] != 'Appendix']
records = applied.to_dict(orient='records')
appendix = appendix_df.to_dict(orient='records')
j2_env = Environment(loader=FileSystemLoader(THIS_DIR),
trim_blocks=True)
print(j2_env.get_template('Standards.confluence.j2').render(data=records,appendix=appendix))
Вот шаблон Confluence jinja2:
h1. Title
h2. Table of Contents
{toc}
h2. Subtitle
Text
h2. References
Ref 1
The following typographical conventions are used throughout this guide:
Text
{% for record in data %}
{% if 'h1.' in record['Control'] %}
{{ record['Control'] }}
{% elif 'h2.' in record['Control'] %}
{{ record['Control'] }}
{% else %}
----
h3. {{ record['Control'] }}
*References*:
|| ABC ||
| {{ record['benchmark'] }} |
*Description*:
{{ record['description'] }}
*Rationale*:
{{ record['rationale'] }}
*Audit*:
{{ record['audit'] }}
*Remediation*:
{{ record['remediation'] }}
*Notes*:
{{ record['notes'] }}
{% endif %}
{% endfor %}
---
Вот часть выходного файла уценки, который показываетгде поля «Обоснование» и «Исправление» экспортируются, но не содержат текст из связанных столбцов в файле CSV:
h1. Title
h2. Table of Contents
{toc}
h2. Subtitle
Text
h2. References
Ref 1
The following conventions are used:
Text
h1. Section 1
----
h3. 1.1 Item 1
*References*:
|| ABC ||
| 1 |
*Description*:
Item 1 Description
*Rationale*:
<This is always blank, but there should be text from the associated CSV file column in this section>
*Audit*:
Item 1 Audit
*Remediation*:
<This is always blank, but there should be text from the associated CSV file column in this section>
*Notes*:
Item 1 Notes