在 Python 中輸出、連接、拆分、刪除和替換包含換行符的字符串

商業

下面介紹 Python 中對包含換行符的字符串的操作。

  • 創建包含換行符的字符串,打印輸出(顯示)
    • 換行符(CR 和 LF 中的一個或兩個,取決於系統)\n(如果),\r\n(CR+LF)
    • 三重引號'',"""
    • 如果你想縮進
  • 用換行符連接字符串列表
  • 將字符串拆分為換行符和列表:splitlines()
  • 刪除和替換換行代碼
  • 打印輸出沒有尾隨換行符

創建包含換行符的字符串,打印輸出

換行符(CR 和 LF 中的一個或兩個,取決於系統)\n(如果),\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(如果)
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() 的 end 參數中指定它們更容易。請參閱以下文章。

Copied title and URL