一个很好的方法使长字符串包装成换行符?

2024-06-09 18:00:25 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的项目中,我有一堆从文件中读取的字符串。其中大多数在命令控制台中打印时,长度超过80个字符,并环绕在一起,看起来很难看。

我希望能够让Python读取字符串,然后测试它的长度是否超过75个字符。如果是,则将字符串拆分为多个字符串,然后在新行上逐个打印。 我也希望它是聪明的,不要断章取义。i、 用"The quick brown <newline> fox..."代替"the quick bro<newline>wn fox..."

我试过修改类似的代码,在设置长度后截断字符串,但只会破坏字符串而不是将其放入新行。

我可以用什么方法来完成这个任务?


Tags: the项目方法字符串代码命令newlinequick
3条回答

这就是textwrap模块的用途。试试textwrap.fill(some_string, width=75)

您可以使用^{}模块:

>>> 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.

帮助关于^{}

>>> 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.

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

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))

输出:

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.

这与Ashwini的答案类似,但不使用re

lim=75
for s in input_string.split("\n"):
    if s == "": print
    w=0 
    l = []
    for d in s.split():
        if w + len(d) + 1 <= lim:
            l.append(d)
            w += len(d) + 1 
        else:
            print " ".join(l)
            l = [d] 
            w = len(d)
    if (len(l)): print " ".join(l)

输出当输入是您的问题时:

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...".

相关问题 更多 >