Pandas如何导出按列最大长度对齐的竖线分隔DataFrame文本文件
Pandas导出竖线分隔对齐文本表格实现方案
Pandas自带的to_string、to_csv方法默认不支持按列最大宽度自动对齐+竖线全包裹的格式化输出,手动计算列宽逐行拼接是最可控的实现方式,完全满足列宽取「表头长度、列内数据最大长度二者较大值」的对齐要求。
第一步:构造测试DataFrame
import pandas as pd df = pd.DataFrame({ 'ID': { 0: 11404371006, 1: 11404371007, 2: 11404371008, 3: 11404371009, 4: 11404371010, 5: 11404371011 }, 'TABLE.F1': { 0: 'Y', 1: 'NULL', 2: 'N', 3: 'N', 4: 'N', 5: 'N' }, 'O': { 0: False, 1: False, 2: False, 3: False, 4: False, 5: False } })
第二步:对齐导出实现代码
# 1. 预处理:所有值转字符串,计算每列需要的对齐宽度 str_df = df.astype(str) col_widths = {} for col in str_df.columns: max_data_length = str_df[col].str.len().max() # 宽度取列表头长度、列内数据最大长度的较大值 col_widths[col] = max(len(col), max_data_length) # 2. 逐行拼接格式化内容 output_lines = [] # 拼接表头行 header_cells = [f" {col.ljust(col_widths[col])} " for col in str_df.columns] output_lines.append(f"|{'|'.join(header_cells)}|") # 可选:拼接表头和数据之间的分隔线,不需要可以直接删除这两行 sep_cells = [f"{'-'*(col_widths[col]+2)}" for col in str_df.columns] output_lines.append(f"|{'|'.join(sep_cells)}|") # 拼接所有数据行 for _, row in str_df.iterrows(): row_cells = [f" {str(row[col]).ljust(col_widths[col])} " for col in str_df.columns] output_lines.append(f"|{'|'.join(row_cells)}|") # 3. 写入本地文本文件 final_content = "\n".join(output_lines) with open("aligned_output.txt", "w", encoding="utf-8") as f: f.write(final_content) # 打印预览效果 print(final_content)
输出效果参考
运行后生成的文本内容格式如下,所有列严格对齐:
| ID | TABLE.F1 | O | |-------------|----------|-------| | 11404371006 | Y | False | | 11404371007 | NULL | False | | 11404371008 | N | False | | 11404371009 | N | False | | 11404371010 | N | False | | 11404371011 | N | False |
自定义调整说明
- 如果不需要表头和数据之间的横分隔线,直接删除代码中拼接
sep_cells的两行即可 - 如果需要内容右对齐,把代码中所有的
ljust方法替换为rjust即可 - 如果需要调整单元格内边距,修改单元格拼接时前后添加的空格数量即可
内容的提问来源于stack exchange,提问作者Rohit12
相关产品推荐
相关产品推荐

