Python 使长字符串换行的好方法?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/16430200/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
A good way to make long strings wrap to newline?
提问by Joshua Merriman
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.
在我的项目中,我有一堆从文件中读入的字符串。其中大部分,在命令控制台打印时,长度超过80个字符并环绕,看起来很难看。
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...".
我希望能够让 Python 读取字符串,然后测试它的长度是否超过 75 个字符。如果是,则将字符串拆分为多个字符串,然后在新行上一个接一个打印。我也希望它很聪明,而不是切断完整的单词。即"The quick brown <newline> fox..."而不是"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?
我可以使用哪些方法来实现这一目标?
采纳答案by Ashwini Chaudhary
You could use textwrapmodule:
您可以使用textwrap模块:
>>> 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.
helpon textwrap.fill:
帮助上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 regexif you don't want to merge a line into another line:
使用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))
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.
回答by jwodder
回答by perreal
This is similar to Ashwini's answer but does not use re:
这类似于 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)
Outputwhen the input is your question:
当输入是您的问题时输出:
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...".
回答by pawan kumar
string, max_width = input(), int(input())
result = wrap(string, max_width)
print(result)
def wrap(string, max_width):
s=''
for i in range(0,len(string),max_width):
s=s+string[i:i+max_width]
s=s+'\n'
return s
回答by user12314353
string, max_width = input(), int(input())
result = wrap(string, max_width)
print(result)
def wrap(string, max_width):
s=''
for i in range(0,len(string),max_width):
s+=string[i:i+max_width]
s+='\n'
return s
回答by Biman Pal
In python-3
在 python-3 中
import textwrap
def wrap(string, max_width):
return '\n'.join(textwrap.wrap(string,max_width))
Input:
输入:
wrap(ABCDEFGHIJKLIMNOQRSTUVWXYZ, 4)
output:
输出:
ABCD
EFGH
IJKL
IMNO
QRST
UVWX
YZ

