在Python中输出、连接、分割、删除和替换含有新行的字符串

商业

下面描述了Python中包含换行符的字符串的操作。

  • 创建含有新行的字符串,打印输出(显示)。
    • 换行符(CR和LF中的一种或两种,取决于系统)。\n(LF), \r\n(CR+LF)
    • 三重报价''',"""
    • 如果你想缩进
  • 用换行符串联一个字符串列表
  • 将字符串分割成换行和列表:splitlines()
  • 拆除和更换换行代码
  • 打印没有尾部换行的输出

创建含有换行符的字符串,打印输出

换行符(CR和LF中的一种或两种,取决于系统)。 \n(LF), \r\n(CR+LF)

在一个字符串中插入换行代码将导致一个新行。

s = 'Line1\nLine2\nLine3'
print(s)
# Line1
# Line2
# Line3

s = 'Line1\r\nLine2\r\nLine3'
print(s)
# Line1
# Line2
# Line3

换行代码可以通过以下方式使用。有些编辑器允许你选择一个换行代码。

Macを含むUnix系\n(LF)
Windows系\r\n(CR+LF)

三重报价 ''',"""

如果用三倍引号来包围字符串,它将是一个原封不动的字符串,包括换行。

s = '''Line1
Line2
Line3'''
print(s)
# Line1
# Line2
# Line3

如果你想缩进

三重引号也是字符串中的空格,所以如果你试图在代码中写得整齐,并像下面所示那样缩进,不必要的空格就会被插入。

s = '''
    Line1
    Line2
    Line3
    '''
print(s)
# 
#     Line1
#     Line2
#     Line3
#     

通过使用反斜杠来忽略代码中的换行符,并使其成为一个延续行,可以写成如下形式

用''或””括住每一行,并在句末添加换行符←n。

s = 'Line1\n'\
    'Line2\n'\
    'Line3'
print(s)
# Line1
# Line2
# Line3

这里的语法是,连续的字符串字头被串联起来。详见以下文章。

如果你想在一个字符串中添加缩进,只需在每一行的字符串中添加一个空格。

s = 'Line1\n'\
    '    Line2\n'\
    '        Line3'
print(s)
# Line1
#     Line2
#         Line3

此外,由于在括号中可以自由地进行换行,因此可以用小括号而不是反斜线来写下面的内容。

s = ('Line1\n'
     'Line2\n'
     'Line3')
print(s)
# Line1
# Line2
# Line3

s = ('Line1\n'
     '    Line2\n'
     '        Line3')
print(s)
# Line1
#     Line2
#         Line3

如果你只想对准一行的开头,只需在第一行的三引号上加一个反斜杠。

s = '''\
Line1
Line2
Line3'''
print(s)
# Line1
# Line2
# Line3

s = '''\
Line1
    Line2
        Line3'''
print(s)
# Line1
#     Line2
#         Line3

用换行符串联一个字符串列表

字符串方法join()可以用来将一个字符串列表连接成一个单一的字符串。

当join()被从一个换行符中调用时,每个字符串元素都被连接上一个换行符。

l = ['Line1', 'Line2', 'Line3']

s_n = '\n'.join(l)
print(s_n)
# Line1
# Line2
# Line3

print(repr(s_n))
# 'Line1\nLine2\nLine3'

s_rn = '\r\n'.join(l)
print(s_rn)
# Line1
# Line2
# Line3

print(repr(s_rn))
# 'Line1\r\nLine2\r\nLine3'

就像上面的例子一样,内置函数repr()可以用来检查含有换行代码的字符串的原样。

将字符串分割成换行和列表: splitlines()

字符串方法splitlines()可以用来将一个字符串分割成一列换行符。

splitlines()将拆分以下任何断行代码。垂直制表符和换页符也会被分割。

  • \n
  • \r\n
  • \v
  • \f
s = 'Line1\nLine2\r\nLine3'
print(s.splitlines())
# ['Line1', 'Line2', 'Line3']

拆除和更换换行代码

通过结合splitlines()和join(),可以从含有换行符的字符串中删除(移除)换行符,或者用其他字符串替换。

s = 'Line1\nLine2\r\nLine3'

print(''.join(s.splitlines()))
# Line1Line2Line3

print(' '.join(s.splitlines()))
# Line1 Line2 Line3

print(','.join(s.splitlines()))
# Line1,Line2,Line3

批量改变换行代码也是可能的。即使换行代码是混合的或未知的,也可以用splitlines()进行分割,然后与所需的换行代码相连接。

s_n = '\n'.join(s.splitlines())
print(s_n)
# Line1
# Line2
# Line3

print(repr(s_n))
# 'Line1\nLine2\nLine3'

如上所述,splitlines()将分割任何一个新行代码,因此在结合splitlines()和join()的方法中,没有必要特别关注新行代码。

如果换行代码很清楚,也可以用replace()方法来替换,替换后的字符串。

s = 'Line1\nLine2\nLine3'

print(s.replace('\n', ''))
# Line1Line2Line3

print(s.replace('\n', ','))
# Line1,Line2,Line3

然而,请注意,如果它包含与预期不同的换行代码,它将无法工作。

s = 'Line1\nLine2\r\nLine3'

s_error = s.replace('\n', ',')
print(s_error)
# ,Line3Line2

print(repr(s_error))
# 'Line1,Line2\r,Line3'

s_error = s.replace('\r\n', ',')
print(s_error)
# Line1
# Line2,Line3

print(repr(s_error))
# 'Line1\nLine2,Line3'

可以通过重复replace()来替换多个换行代码,但如果顺序错误,就会失效,因为”\r\n “包含”\n”。上面描述的结合splitlines()和join()的方法更安全,因为不需要担心换行代码。

s = 'Line1\nLine2\r\nLine3'

print(s.replace('\r\n', ',').replace('\n', ','))
# Line1,Line2,Line3

s_error = s.replace('\n', ',').replace('\r\n', ',')
print(s_error)
# ,Line3Line2

print(repr(s_error))
# 'Line1,Line2\r,Line3'

print(','.join(s.splitlines()))
# Line1,Line2,Line3

使用rstrip()方法删除句末的换行代码。rstrip()是一个删除字符串右端空白字符(包括换行)的方法。

s = 'aaa\n'
print(s + 'bbb')
# aaa
# bbb

print(s.rstrip() + 'bbb')
# aaabbb

打印没有尾部换行的输出

print()函数默认添加了一个尾部换行。因此,如果连续执行print(),每个输出结果都将显示在一个新行上。

print('a')
print('b')
print('c')
# a
# b
# c

这是因为print()的参数end的默认值是换行符号,它指定了要加在最后的字符串。

如果你不希望在结尾处有换行,只需将参数end设置为空字符串,输出时就会在结尾处没有换行。

print('a', end='')
print('b', end='')
print('c', end='')
# abc

参数end可以是任何字符串。

print('a', end='-')
print('b', end='-')
print('c')
# a-b-c

然而,如果你想串联字符串进行输出,串联原始字符串比在print()的结束参数中指定它们更容易。参见下面的文章。

Copied title and URL