我使用Python脚本导入CSV数据,过滤和排序,将其转换为HTML,然后是PDF。我想找到一种在特定行后添加分页符的方法。
假设以下示例:
数据按列col1
排序,形成“组”。我想在每个组后面添加一个分页符(col1
中的新值):
- 输入数据(CSV表)*
| col2| col3| col3 |
| --|--| ------------ |
| x轴|一个| a |
| 是的|B| b |
| x轴|一个| a |
| x轴|一个| a |
| 是的|B| b |
| x轴|一个| a |
| x轴|一个| a |
| 是的|B| b |
- 输出数据(PDF格式的表格)*
(page添加分隔符,每页重复列标题)
| col2| col3| col3 |
| --|--| ------------ |
| x轴|一个| a |
| 是的|B| b |
| |||
| col2| col3| col3 |
| x轴|一个| a |
| x轴|一个| a |
| 是的|B| b |
| x轴|一个| a |
| |||
| col2| col3| col3 |
| x轴|一个| a |
| 是的|B| b |
我的工作流程大致如下:
df = pd.read_csv(input_filename, encoding="")
filtered_df = df[some_condition]
filtered_df = filtered_df.sort_values(some_other_condition)
html_table = filtered_df.to_html(index=False)
html_string = html_head + html_something + html_table + html_something_else + html_foot
pdfkit.from_string(html_string, outfile_name, options=pdfkit_options)
字符串
我看到了以下替代方法(但还不知道如何实现它们,我不喜欢其中任何一种):
1.解析数据并添加“ghost”行,不携带任何数据,但携带一些 magic string token,可以在HTML转换后由其他HTML magic(具有特定CSS样式的表行?)。感觉非常hacky。
1.将大表拆分为小表(每组一个-但如何拆分?)。将它们分别转换为HTML,然后再放回去(使用一些HTML/CSS魔法)。
1.使用一些我不知道的pdfkit选项或pandas.DataFrame.to_html
选项。
1.使用完全不同的方法。
我事先并不知道col1
包含的所有值,但是很容易找到它们,并重用它们进行进一步的处理。
任何帮助都非常感谢。
2条答案
按热度按时间abithluo1#
尝试以下操作:
字符串
就像你做的那样:
型
6psbrbz92#
我使用以下方法(OP的#2):
将单个表拆分为更小的表(“子表”),并将它们一个接一个地转换为HTML,将所有HTML表放在一起,中间有分页符。
1.获取
group_column
的唯一值(在我的示例中为col1
)1.迭代这些组并过滤
pandas.DataFrame
以仅选择与该组匹配的行。1.在每个组/表之后添加分页符(最后一个组/表之后除外)。
字符串
从HTML到PDF的转换是不变的。
感谢@notarealgreal的
html_page_break
+enumerate
。