Python使用textwrap处理字符串时出现非预期换行问题求助
问题根因
你使用的textwrap.TextWrapper默认是为自然语言文本排版设计的,默认开启了break_on_hyphens参数,会优先在连字符(-)位置断行,不会严格按照指定的max_width硬切割字符串,所以第三行的内容刚好触发了这个规则,导致提前换行。同时textwrap默认还会自动处理空白字符,也可能在这类非自然文本的切割场景下出现非预期行为。
解决方法
有两种方案可以解决:
方案1:修改TextWrapper参数,关闭自动断行规则
调整你的wrap函数,把不需要的自动换行逻辑全部关闭:
def wrap(string, max_width): wrapper = textwrap.TextWrapper( width=max_width, break_long_words=True, break_on_hyphens=False, replace_whitespace=False, drop_whitespace=False ) return wrapper.fill(text=string)
方案2:直接用字符串切片硬切割(更适合当前场景,无需依赖textwrap)
不需要引入textwrap库,直接按固定宽度切片拼接即可,逻辑更简单也不会出现多余问题:
def wrap(string, max_width): return '\n'.join([string[i:i+max_width] for i in range(0, len(string), max_width)])
修改后输入7 21的输出会符合预期,第三行会完整显示为---.|..|..|..|..|.---,不会出现提前换行。
内容的提问来源于stack exchange,提问作者Md. Samin Abrar
相关产品推荐
相关产品推荐

