Keluarkan, gabungkan, belah, padam dan gantikan rentetan yang mengandungi baris baharu dalam Python

Perniagaan

Berikut menerangkan pengendalian rentetan yang mengandungi baris baharu dalam Python.

  • Buat rentetan yang mengandungi baris baharu, keluaran cetak (paparan)
    • aksara baris baharu (sama ada atau kedua-duanya CR dan LF bergantung pada sistem)\n(LF),\r\n(CR+LF)
    • petikan tiga kali ganda'',"""
    • Jika anda ingin inden
  • Gabungkan senarai rentetan dengan baris baharu
  • Pisahkan rentetan kepada baris baharu dan senaraikan:splitlines()
  • Alih keluar dan gantikan kod suapan baris
  • Cetak output tanpa mengekori baris baharu

Buat rentetan yang mengandungi baris baharu, cetak output

aksara baris baharu (sama ada atau kedua-duanya CR dan LF bergantung pada sistem)\n(LF),\r\n(CR+LF)

Memasukkan kod suapan baris dalam rentetan akan menghasilkan baris baharu.

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

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

Kod suapan baris boleh digunakan dengan cara berikut. Sesetengah editor membenarkan anda memilih kod pemisah baris.

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

petikan tiga kali ganda'',"""

Jika petikan tiga kali ganda digunakan untuk melampirkan rentetan, ia akan menjadi rentetan sebagaimana adanya, termasuk baris baharu.

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

Jika anda ingin inden

Petikan tiga kali ganda juga merupakan ruang dalam rentetan, jadi jika anda cuba menulis dengan kemas dalam kod dan inden seperti yang ditunjukkan di bawah, ruang yang tidak perlu akan disisipkan.

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

Dengan menggunakan garis miring ke belakang untuk mengabaikan baris baharu dalam kod dan menjadikannya baris kesinambungan, ia boleh ditulis seperti berikut

Lampirkan setiap baris dengan ” atau “” dan tambahkan aksara baris baharu ←n di hujung ayat.

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

Di sini, sintaksnya ialah literal rentetan berturut-turut disatukan. Lihat artikel berikut untuk butirannya.

Jika anda ingin menambah lekukan dalam rentetan, hanya tambahkan ruang pada rentetan dalam setiap baris.

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

Selain itu, memandangkan pemisah baris boleh dibuat secara bebas dalam kurungan, yang berikut boleh ditulis menggunakan kurungan dan bukannya garis miring ke belakang.

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

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

Jika anda hanya ingin menjajarkan permulaan baris, cuma tambahkan garis miring ke belakang pada baris pertama petikan tiga kali ganda.

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

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

Gabungkan senarai rentetan dengan baris baharu

Kaedah rentetan join() boleh digunakan untuk menggabungkan senarai rentetan menjadi rentetan tunggal.

Apabila join() dipanggil daripada aksara baris baharu, setiap elemen rentetan digabungkan dengan baris baharu.

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'

Seperti dalam contoh di atas, fungsi terbina dalam repr() boleh digunakan untuk menyemak rentetan yang mengandungi kod baris baharu sebagaimana adanya.

Pisahkan rentetan kepada baris baharu dan senaraikan:splitlines()

Kaedah rentetan splitlines() boleh digunakan untuk memisahkan rentetan ke dalam senarai baris baharu.

splitlines() akan memisahkan mana-mana kod pemisah baris berikut. Tab menegak dan pemisah halaman juga dibahagikan.

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

Alih keluar dan gantikan kod suapan baris

Dengan menggabungkan splitlines() dan join(), adalah mungkin untuk mengalih keluar (mengalih keluar) kod baris baharu daripada rentetan yang mengandungi baris baharu atau menggantikannya dengan rentetan lain.

s = 'Line1\nLine2\r\nLine3'

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

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

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

Perubahan kelompok kod suapan baris juga mungkin. Walaupun kod pemisah baris bercampur atau tidak diketahui, ia boleh dipisahkan menggunakan splitlines() dan kemudian digabungkan dengan kod pemisah baris yang dikehendaki.

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

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

Seperti yang dinyatakan di atas, splitlines() akan membahagikan sama ada kod baris baharu, jadi tidak perlu mengambil berat tentang kod baris baharu dalam kes kaedah menggabungkan splitlines() dan join().

Jika kod baris baharu jelas, ia juga boleh digantikan dengan kaedah replace(), yang menggantikan rentetan.

s = 'Line1\nLine2\nLine3'

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

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

Walau bagaimanapun, ambil perhatian bahawa ia tidak akan berfungsi jika ia mengandungi kod suapan baris yang berbeza daripada yang dijangkakan.

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'

Anda boleh menggantikan berbilang kod baris baharu dengan mengulangi replace(), tetapi ia tidak akan berfungsi jika pesanan itu salah kerana “\r\n” mengandungi “\n”. Kaedah menggabungkan splitlines() dan join() yang diterangkan di atas adalah lebih selamat kerana tidak perlu risau tentang kod suapan baris.

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

Gunakan kaedah rstrip() untuk mengalih keluar kod suapan baris pada akhir ayat. rstrip() ialah kaedah untuk mengalih keluar aksara ruang putih (termasuk suapan baris) di hujung kanan rentetan.

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

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

Cetak output tanpa mengekori baris baharu

Fungsi print() menambah baris baharu mengekori secara lalai. Oleh itu, jika print() dilaksanakan berturut-turut, setiap hasil output akan dipaparkan pada baris baharu.

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

Ini kerana nilai lalai hujah hujung print(), yang menentukan rentetan yang akan ditambah pada penghujung, ialah simbol baris baharu.

Jika anda tidak mahu baris baharu pada penghujungnya, tetapkan hujung hujah kepada rentetan kosong, dan output akan dikeluarkan tanpa baris baharu pada penghujungnya.

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

Hujah akhir boleh menjadi sebarang rentetan.

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

Walau bagaimanapun, jika anda ingin menggabungkan rentetan untuk output, lebih mudah untuk menggabungkan rentetan asal daripada menentukannya dalam hujah akhir print(). Lihat artikel berikut.