使长字符串换行的好方法? [英] A good way to make long strings wrap to newline?

查看:60
本文介绍了使长字符串换行的好方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的项目中,我有一堆从文件中读入的字符串.大部分,在命令控制台打印的时候,长度超过80个字符,绕起来,很难看.

我希望能够让 Python 读取字符串,然后测试它的长度是否超过 75 个字符.如果是,则将字符串拆分为多个字符串,然后在新行上一个接一个打印.我也希望它很聪明,而不是切断完整的单词.即 "The quick brown fox..." 而不是 "the quick brown fox...".

我尝试修改类似的代码,在设定的长度后截断字符串,但只是删除字符串而不是将其放在新行中.

我可以使用哪些方法来实现这一目标?

解决方案

您可以使用 textwrap 模块:

<预><代码>>>>导入文本换行>>>strs = "在我的项目中,我有一堆从文件中读入的字符串.其中大多数在命令控制台中打印时,长度超过 80 个字符并环绕,看起来很难看.">>>打印(textwrap.fill(strs, 20))在我的项目中,我有一堆字符串是从文件中读入.他们中的大多数,当印在命令控制台,超过 80 个字符在长度和包裹周围,​​看着丑陋的.

帮助关于textwrap.填充:

<预><代码>>>>textwrap.fill?定义: textwrap.fill(text, width=70, **kwargs)文档字符串:填充一段文本,返回一个新字符串.重新格式化文本"中的单个段落以适应不再有的行比 'width' 列,并返回一个包含整个的新字符串包裹的段落.与 wrap() 一样,选项卡被展开和其他空白字符转换为空格.请参阅 TextWrapper 类可用的关键字参数来自定义包装行为.

如果不想将一行合并到另一行,请使用 regex:

导入重新strs = """在我的项目中,我有一堆字符串.从文件中读入.其中大多数在命令控制台中打印时超过 80.字长又绕,难看."""print('\n'.join(line.strip() for line in re.findall(r'.{1,40}(?:\s+|$)', strs)))# 一次读取一行:对于 strs.splitlines() 中的 x:打印 '\n'.join(line.strip() for line in re.findall(r'.{1,40}(?:\s+|$)', x))

输出:

在我的项目中,我有一堆字符串那是.从文件中读入.他们中的大多数,当打印在命令控制台,超过80.字符长度和环绕,长得丑.

In my project, I have a bunch of strings that are read in from a file. Most of them, when printed in the command console, exceed 80 characters in length and wrap around, looking ugly.

I want to be able to have Python read the string, then test if it is over 75 characters in length. If it is, then split the string up into multiple strings, then print one after the other on a new line. I also want it to be smart, not cutting off full words. i.e. "The quick brown <newline> fox..." instead of "the quick bro<newline>wn fox...".

I've tried modifying similar code that truncates the string after a set length, but just trashes the string instead of putting it in a new line.

What are some methods I could use to accomplish this?

解决方案

You could use textwrap module:

>>> import textwrap
>>> strs = "In my project, I have a bunch of strings that are read in from a file. Most of them, when printed in the command console, exceed 80 characters in length and wrap around, looking ugly."
>>> print(textwrap.fill(strs, 20))
In my project, I
have a bunch of
strings that are
read in from a file.
Most of them, when
printed in the
command console,
exceed 80 characters
in length and wrap
around, looking
ugly.

help on textwrap.fill:

>>> textwrap.fill?

Definition: textwrap.fill(text, width=70, **kwargs)
Docstring:
Fill a single paragraph of text, returning a new string.

Reformat the single paragraph in 'text' to fit in lines of no more
than 'width' columns, and return a new string containing the entire
wrapped paragraph.  As with wrap(), tabs are expanded and other
whitespace characters converted to space.  See TextWrapper class for
available keyword args to customize wrapping behaviour.

Use regex if you don't want to merge a line into another line:

import re


strs = """In my project, I have a bunch of strings that are.
Read in from a file.
Most of them, when printed in the command console, exceed 80.
Characters in length and wrap around, looking ugly."""

print('\n'.join(line.strip() for line in re.findall(r'.{1,40}(?:\s+|$)', strs)))

# Reading a single line at once:
for x in strs.splitlines():
    print '\n'.join(line.strip() for line in re.findall(r'.{1,40}(?:\s+|$)', x))

output:

In my project, I have a bunch of strings
that are.
Read in from a file.
Most of them, when printed in the
command console, exceed 80.
Characters in length and wrap around,
looking ugly.

这篇关于使长字符串换行的好方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆