Untuk memformat rentetan dalam Python dengan membungkus (pemutus baris) dan memotong (menyingkat) pada bilangan aksara sewenang-wenangnya, gunakan modul pembalut teks perpustakaan standard.
Maklumat berikut disediakan di sini.
- Membungkus rentetan (suapan baris):
wrap()
,fill()
- Potong rentetan (diabaikan):
shorten()
- Objek TextWrapper
Jika anda ingin menulis rentetan panjang pada berbilang baris dalam kod dan bukannya dalam output, lihat artikel berikut.
- Artikel berkaitan:Menulis rentetan panjang teks pada berbilang baris dalam Python
Membungkus rentetan (suapan baris):wrap(),fill()
Dengan fungsi wrap() modul textwrap, anda boleh mendapatkan senarai dibahagikan dengan pemisah perkataan untuk dimuatkan ke dalam bilangan aksara arbitrari.
Tentukan bilangan aksara untuk lebar argumen kedua. Lalai ialah lebar=70.
import textwrap
s = "Python can be easy to pick up whether you're a first time programmer or you're experienced with other languages"
s_wrap_list = textwrap.wrap(s, 40)
print(s_wrap_list)
# ['Python can be easy to pick up whether', "you're a first time programmer or you're", 'experienced with other languages']
Menggunakan senarai yang diperoleh, anda boleh mendapatkan rentetan yang dipecahkan oleh kod baris baharu dengan melakukan perkara berikut\n'.join(list)
print('\n'.join(s_wrap_list))
# Python can be easy to pick up whether
# you're a first time programmer or you're
# experienced with other languages
Fungsi fill() mengembalikan rentetan baris baharu dan bukannya senarai. Ia adalah sama seperti melaksanakan kod berikut selepas wrap() seperti dalam contoh di atas.\n'.join(list)
Ini lebih mudah apabila anda tidak memerlukan senarai tetapi ingin mengeluarkan rentetan lebar tetap ke terminal, dsb.
print(textwrap.fill(s, 40))
# Python can be easy to pick up whether
# you're a first time programmer or you're
# experienced with other languages
Jika argumen max_line ditentukan, bilangan baris selepasnya akan ditinggalkan.
print(textwrap.wrap(s, 40, max_lines=2))
# ['Python can be easy to pick up whether', "you're a first time programmer or [...]"]
print(textwrap.fill(s, 40, max_lines=2))
# Python can be easy to pick up whether
# you're a first time programmer or [...]
Jika ditinggalkan, rentetan berikut akan dikeluarkan pada penghujung secara lalai.[...]'
Ia boleh digantikan dengan mana-mana rentetan dengan ruang letak hujah.
print(textwrap.fill(s, 40, max_lines=2, placeholder=' ~'))
# Python can be easy to pick up whether
# you're a first time programmer or ~
Anda juga boleh menentukan rentetan untuk ditambahkan pada permulaan baris pertama dengan argumen initial_indent. Ini boleh digunakan apabila anda ingin menginden permulaan perenggan.
print(textwrap.fill(s, 40, max_lines=2, placeholder=' ~', initial_indent=' '))
# Python can be easy to pick up whether
# you're a first time programmer or ~
Berhati-hati dengan aksara saiz penuh dan separuh saiz.
Dalam textwrap, bilangan aksara dikawal oleh bilangan aksara, bukan oleh lebar aksara, dan kedua-dua aksara bait tunggal dan dua bait dianggap sebagai satu aksara.
s = '文字文字文字文字文字文字12345,67890, 文字文字文字abcde'
print(textwrap.fill(s, 12))
# 文字文字文字文字文字文字
# 12345,67890,
# 文字文字文字abcde
Jika anda ingin membungkus teks dengan aksara kanji bercampur dengan lebar tetap, sila rujuk perkara berikut.
Potong rentetan (diabaikan):shorten()
Jika anda ingin memotong dan meninggalkan rentetan, gunakan fungsi shorten() dalam modul textwrap.
Disingkatkan dalam unit perkataan untuk memuatkan bilangan aksara yang sewenang-wenangnya. Bilangan aksara, termasuk rentetan yang menunjukkan peninggalan, adalah sewenang-wenangnya. Rentetan yang menunjukkan peninggalan boleh ditetapkan dengan pemegang tempat hujah, yang lalai kepada yang berikut.[...]'
s = 'Python is powerful'
print(textwrap.shorten(s, 12))
# Python [...]
print(textwrap.shorten(s, 12, placeholder=' ~'))
# Python is ~
Namun, rentetan bahasa Jepun misalnya, tidak boleh disingkatkan dengan baik kerana ia tidak boleh dibahagikan kepada perkataan.
s = 'Pythonについて。Pythonは汎用のプログラミング言語である。'
print(textwrap.shorten(s, 20))
# [...]
Jika anda ingin meringkaskan dengan hanya mempertimbangkan bilangan aksara dan bukannya unit perkataan, ia boleh dicapai dengan mudah seperti berikut.
s_short = s[:12] + '...'
print(s_short)
# Pythonについて。P...
Objek TextWrapper
Jika anda akan wrap() atau fill() berkali-kali dengan konfigurasi tetap, adalah cekap untuk mencipta objek TextWrapper.
wrapper = textwrap.TextWrapper(width=30, max_lines=3, placeholder=' ~', initial_indent=' ')
s = "Python can be easy to pick up whether you're a first time programmer or you're experienced with other languages"
print(wrapper.wrap(s))
# [' Python can be easy to pick', "up whether you're a first time", "programmer or you're ~"]
print(wrapper.fill(s))
# Python can be easy to pick
# up whether you're a first time
# programmer or you're ~
Tetapan yang sama boleh digunakan semula.