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

使用PyYAML Representer时控制折叠字符串的换行长度

控制PyYAML折叠字符串的换行长度

好问题!PyYAML本身并没有直接给折叠字符串(>风格)提供单独的换行长度配置项,但我们有两种方法可以实现你想要的“每行约70字符换行”的需求,下面详细说明:

方法1:利用yaml.dump()的width参数

PyYAML的dump()方法自带一个width参数,它可以控制输出文本的整体换行宽度——对于折叠风格的字符串来说,PyYAML会根据这个宽度自动拆分内容,同时尽量保证不拆分空格分隔的单词。

修改你的代码,在dump()时加入width=70即可:

import yaml
class folded_str(str):
    pass
def folded_str_representer(dumper, data):
    return dumper.represent_scalar(u'tag:yaml.org,2002:str', data, style='>')
yaml.add_representer(folded_str, folded_str_representer)
data = {
    'foo': folded_str(('abcdefghi ' * 10) + 'end\n'),
}
# 通过width参数控制换行宽度
print(yaml.dump(data, width=70))

这个方法简单直接,不需要额外处理字符串;但要注意,如果你的字符串包含无空格的超长连续字符(比如一串没有空格的长单词),PyYAML还是会强制在width设置的位置拆分。

方法2:手动预处理字符串(精确控制换行)

如果需要严格按照70字符换行,或者想自定义单词拆分规则,你可以先手动把字符串拆分成指定长度的行,再传入折叠字符串类中:

import yaml
class folded_str(str):
    pass
def folded_str_representer(dumper, data):
    return dumper.represent_scalar(u'tag:yaml.org,2002:str', data, style='>')
yaml.add_representer(folded_str, folded_str_representer)

# 自定义字符串拆分函数,按指定宽度分割,可保留单词完整性
def split_str_to_width(s, target_width=70):
    lines = []
    current_pos = 0
    str_len = len(s)
    while current_pos < str_len:
        # 先截取到目标宽度位置
        end_pos = min(current_pos + target_width, str_len)
        # 如果不是最后一行,尽量找到最近的空格拆分,避免截断单词
        if end_pos < str_len:
            space_pos = s.rfind(' ', current_pos, end_pos)
            if space_pos != -1:
                end_pos = space_pos
        lines.append(s[current_pos:end_pos].strip())
        current_pos = end_pos + 1
    return '\n'.join(lines)

# 预处理字符串后再传入
long_str = ('abcdefghi ' * 10) + 'end\n'
data = {
    'foo': folded_str(split_str_to_width(long_str, target_width=70)),
}
print(yaml.dump(data))

这个方法能让你完全控制换行的位置,既可以选择严格按字符数拆分,也可以保留单词完整性,灵活性更高。

总结

PyYAML本身支持通过width参数间接控制折叠字符串的换行长度,如果需要更精确的定制,手动预处理字符串是可靠的解决方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:54:40