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

如何用紧凑f-string实现非字符串对象的带空格格式化输出并保留对象信息?

Path对象的f-string对齐格式化方案

直接使用{var=:>N}格式处理Path对象会触发TypeError,因为Path类的__format__方法不支持这类格式化说明符。但我们可以通过以下方式实现**保留对象类型信息(如PosixPath(...))**同时对齐输出的需求:

基础实现方式

直接用repr()获取Path对象的完整字符串表示,再对其进行对齐格式化:

from pathlib import Path
b = Path.cwd()
# 调整>后面的数字控制对齐宽度
print(f'b={repr(b):>20}')

输出效果:

b=                  PosixPath('/home/user')

批量变量/类属性对齐打印

如果需要打印多个变量或类属性,并且希望等号左侧的变量名也对齐,可以写一个通用函数来处理:

批量打印类属性示例

from pathlib import Path

class Project:
    def __init__(self):
        self.project = Path('/home/user/project')
        self.project_a = Path('/home/user/project/project')
        self.longer = Path('/home/user/project/project/icons/project/pic.png')
        self.PIPFILELOCK = Path('/home/user/project/Pipfile.lock')
        self.VIRTUALENV = Path('/home/user/.local/share/virtualenvs/project-mKDFEK')

def print_aligned_attrs(obj, attr_list, align_width=15):
    # 计算最长属性名长度,让等号左侧对齐
    max_name_length = max(len(attr) for attr in attr_list)
    for attr_name in attr_list:
        value = getattr(obj, attr_name)
        # <{max_name_length} 让变量名左对齐补空格,>{align_width} 让对象表示右对齐
        print(f'{attr_name:<{max_name_length}}= {repr(value):>{align_width}}')

# 使用示例
proj = Project()
target_attrs = ['project', 'project_a', 'longer', 'PIPFILELOCK', 'VIRTUALENV']
print_aligned_attrs(proj, target_attrs)

输出效果:

project=       PosixPath('/home/user/project')
project_a=     PosixPath('/home/user/project/project')
longer=        PosixPath('/home/user/project/project/icons/project/pic.png')
PIPFILELOCK=   PosixPath('/home/user/project/Pipfile.lock')
VIRTUALENV=    PosixPath('/home/user/.local/share/virtualenvs/project-mKDFEK')

核心原理

  • repr(obj)会返回对象的官方字符串表示(如PosixPath('/home/user')),保留了对象类型信息
  • 对repr()的结果使用格式化说明符(如>20)实现对齐,避免了直接对Path对象格式化的报错问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 14:08:13