Python使用write写文件时如何传入函数保持表格输出格式一致
问题根因
现有代码生成的备份文件格式不符合预期,核心有3个问题:
write_data仅写入了数据行,完全缺失表头、分隔线内容- 数据行格式化字符串和
print_all_records的规则不一致,漏了rec[1]后的空格,且写入时没有加换行符\n,所有内容会挤在同一行 - 控制台打印、文件写入维护了两套独立的格式化逻辑,只要改其中一处就会出现两边格式不统一的问题
实现方案:复用同一套格式化逻辑
Python内置的print函数原生支持file参数,可以直接指定输出目标,不需要重复编写格式化规则。你只需要把公共的表格渲染逻辑抽成独立函数,同时支持输出到控制台、文件流即可,修改后的代码如下:
def render_records(records, output_stream): # 唯一的表格格式化逻辑,所有输出场景共用 ttl = "Store Id" emplys = "Employees" sub_name = "Suburb" sale_vol = "Sale volume" # 写入表头 print(f"{ttl:>1} {emplys:>15} {sub_name:>15} {sale_vol:>20}", file=output_stream) # 写入分隔线 print("-----------------------------------------------------------------------", file=output_stream) # 写入数据行,对齐、空格规则和原控制台输出完全一致 for rec in records: print(f"{rec[0]:>1}{rec[1]:>15} {rec[2]:>20}{rec[3]:>20}", file=output_stream) def print_all_records(records): # 控制台输出场景:传入标准输出流 import sys render_records(records, sys.stdout) def write_data(filename, records): # 文件写入场景:传入文件对象,输出格式和控制台100%匹配 with open(filename, "w", encoding="utf-8") as writefile: render_records(records, writefile)
方案说明
- 所有格式规则只维护一份,不管是打印控制台还是写文件,对齐、空格、换行完全一致,不会出现格式错位问题
- 不需要手动拼接换行符,
print函数会自动按照系统规则添加行尾换行,和控制台输出的换行表现完全相同 - 注意不要用
list作为参数名,这是Python内置的列表类型关键字,作为变量名使用会覆盖内置方法,容易触发隐蔽bug,上述代码已经将参数名统一修改为records
内容的提问来源于stack exchange,提问作者dinonuggie
相关产品推荐
相关产品推荐

