You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python收款凭证格式化:解决列错位排版问题的技术咨询

解决方案:Python收款凭证格式调整与数据结构化思路

一、数据结构化起步思路

必须把凭证数据拆分为结构化格式存储,推荐用字典列表存储面额明细,单独用字典存交易号、总计信息。这种方式能彻底分离数据与格式,后续调整格式、修改数据都更灵活,避免硬编码字符串的麻烦。

示例结构化数据:

# 交易号
transaction_no = "7487215638"

# 面额明细:每个字典对应一条面额记录,extra字段存括号内的额外信息(可选)
denomination_details = [
    {"currency": "HUF", "denomination": 500, "pcs": 26, "amount": "13,000", "extra": "(          1) (              500)"},
    {"currency": "HUF", "denomination": 1000, "pcs": 28, "amount": "28,000", "extra": None},
    {"currency": "HUF", "denomination": 2000, "pcs": 27, "amount": "54,000", "extra": "(          1) (            2,000)"},
    {"currency": "HUF", "denomination": 5000, "pcs": 15, "amount": "75,000", "extra": None},
    {"currency": "HUF", "denomination": 10000, "pcs": 24, "amount": "240,000", "extra": None},
    {"currency": "HUF", "denomination": 20000, "pcs": 10, "amount": "200,000", "extra": None},
]

# 总计信息
total_info = {
    "currency": "HUF",
    "total_pcs": 130,
    "total_amount": "610,000",
    "total_extra": "(          2) (            2,500)"
}

二、凭证格式调整实现

核心用Python的f-string对齐格式化,通过指定对齐方向(左/右/居中)和宽度,精准控制每列位置,解决CUR./DENOMI.列比PCS./AMOUNT列高一行的问题。

完整打印函数:

def print_receipt(transaction_no, details, total):
    # 打印居中的交易号,总宽度适配凭证长度
    print(f"{'TRANSACTION NO. ' + transaction_no:^40}")
    print()
    # 打印CUR. DENOMI.表头
    print(f"CUR. DENOMI.{'':<20}")
    
    # 遍历每条面额明细
    for item in details:
        # 第一行:打印币种+面额,左对齐占10位
        print(f"{item['currency']} {item['denomination']:<10}")
        # 第二行:打印PCS和AMOUNT,缩进后右对齐,控制列间距
        print(f"{'':<10}{item['pcs']:>10}{item['amount']:>15}")
        # 若有额外信息,打印第三行
        if item['extra']:
            print(f"{'':<10}{item['extra']}")
    
    # 打印分隔线
    print("-" * 40)
    # 打印总计部分
    print(f"{total['currency']:<10}")
    print(f"  TOTAL{'':<5}{total['total_pcs']:>10}{total['total_amount']:>15}")
    print(f"{'':<10}{total['total_extra']}")

# 调用函数生成凭证
print_receipt(transaction_no, denomination_details, total_info)

三、关键逻辑说明

  1. 列对齐控制:用:<10(左对齐占10位)、:>10(右对齐占10位)、:^40(居中占40位)等格式符,确保每列位置固定;
  2. 行结构对应:每条面额明细先打印CUR./DENOMI.行,再打印PCS./AMOUNT行,天然实现“高一行”的视觉效果;
  3. 扩展性:后续新增币种、调整列宽,只需修改格式化参数或结构化数据,无需重构整个打印逻辑。

内容的提问来源于stack exchange,提问作者Tamas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 21:21:04