Pythonで改行を含む文字列の出力、連結、分割、削除、置換

Pythonにおける改行を含む文字列の操作について、

改行を含む文字列を作成、print出力(表示)する方法 文字列のリスト(配列)を改行して連結(結合)する方法 文字列を改行ごとに分割してリスト化する方法 改行コードを削除または置換する方法 末尾の改行なしでprint出力する方法

を説明します。

改行を含む文字列を作成、print出力(表示)

改行コード \n(LF), \r\n(CR+LF) 文字列内に改行コード\nや\r\nを挿入すると改行されます。

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)が改行コードとして使われる。エディタによっては改行コードを選択できるものもあります。 トリプルクォート ''' or """ トリプルクォート'''または"""で囲むと改行も含めてそのままの文字列となります。

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()を使うと、文字列のリスト(配列)を一つの文字列に連結(結合)することができます。改行文字\nや\r\nを使えば文字列要素ごとに改行されて連結されます。

l = ['Line1', 'Line2', 'Line3']
s = '\n'.join(l)
print(s)
# Line1
# Line2
# Line3

join()についての詳細は

文字列を改行ごとに分割、リスト化: splitlines()

文字列メソッドsplitlines()で文字列を改行ごとに分割し、リスト化できます。

s = 'Line1\nLine2\r\nLine3'
l = s.splitlines()
print(l)
# ['Line1', 'Line2', 'Line3']

splitlines()は\n(LF: Mac含むUnix系)も\r\n(CRLF: Windows系)も改行コードとして分割してくれる。 splitlines()についての詳細は

改行コードの削除、置換

splitlines()とjoin()を組み合わせることで、改行を含む文字列から改行コードを削除(除去)したり他の文字列に置換したりすることができます。改行コードの変更もできます。

s = 'Line1\nLine2\r\nLine3'

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

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

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

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

上述のようにsplitlines()は\n(LF: Mac含むUnix系)も\r\n(CRLF: Windows系)も改行として分割してくれるので、splitlines()とjoin()を組み合わせる方法の場合は特に改行コードを気にする必要はない。 改行コードがはっきりしている場合は、文字列を置き換えるreplace()メソッドでも問題ありません。

s = 'Line1\nLine2\nLine3'

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

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

ただし、想定と異なる改行コードが含まれているとうまくいかないので気をつけてください。

s = 'Line1\nLine2\r\nLine3'

s_new = s.replace('\n', ',')
print(s_new)
# ,Line3

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

replace()を繰り返して複数の改行コードを置き換えることもできるが、\r\nには\nが含まれているので順番を間違えるとうまくいかない。上述のsplitlines()とjoin()を組み合わせた方法だと改行コードを気にする必要がないので安全。

s = 'Line1\nLine2\r\nLine3'

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

s_new = s.replace('\n', ',').replace('\r\n', ',')
print(s_new)
# ,Line3

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

文末の改行コードを削除するだけならrstrip()メソッドでも問題ありません。rstrip()は文字列の右端の空白文字(改行含む)を削除するメソッド。

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

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

末尾の改行なしでprint出力する

print()関数ではデフォルトで末尾に改行が追加されます。このため連続してprint()を実行すると各出力結果が改行されて表示されます。

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

これは末尾に追加する文字列を指定するprint()の引数endのデフォルト値が改行記号'\n'になっているから。 末尾で改行させないようにするには引数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で指定するより元の文字列を連結したほうが楽。

Last Updated: 6/26/2019, 10:34:03 PM