Ak chcete formátovať reťazec v jazyku Python zabalením (zalomením riadku) a skrátením (skrátením) na ľubovoľný počet znakov, použite modul textwrap štandardnej knižnice.
Tu sú uvedené tieto informácie.
- Obalenie reťazca (podávanie riadkov):
wrap()
,fill()
- Skracovanie reťazcov (vynechané):
shorten()
- Objekt TextWrapper
Ak chcete písať dlhé reťazce na viacerých riadkoch v kóde namiesto vo výstupe, pozrite si nasledujúci článok.
Obalenie reťazca (podávanie riadkov): wrap(), fill()
Pomocou funkcie wrap() modulu textwrap môžete získať zoznam rozdelený podľa slovných zlomov tak, aby sa zmestil do ľubovoľného počtu znakov.
Zadajte počet znakov pre šírku druhého argumentu. Predvolená hodnota je width=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']
Pomocou získaného zoznamu môžete získať reťazec, ktorý je prerušený kódom nového riadku, nasledujúcim postupom'\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
Funkcia fill() vracia namiesto zoznamu reťazec nového riadku. Je to rovnaké ako vykonanie nasledujúceho kódu po funkcii wrap() ako v príklade vyššie.'\n'.join(list)
Je to výhodnejšie, keď nepotrebujete zoznam, ale chcete na terminál vypisovať reťazec s pevnou šírkou atď.
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
Ak je zadaný argument max_line, počet riadkov za ním sa vynechá.
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 [...]
Ak sa vynechá, na konci sa štandardne vypíše nasledujúci reťazec.' [...]'
Možno ho nahradiť ľubovoľným reťazcom so zástupným argumentom.
print(textwrap.fill(s, 40, max_lines=2, placeholder=' ~'))
# Python can be easy to pick up whether
# you're a first time programmer or ~
Pomocou argumentu initial_indent môžete tiež zadať reťazec, ktorý sa má pridať na začiatok prvého riadku. To možno použiť, keď chcete odsadiť začiatok odseku.
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 ~
Dávajte pozor na znaky plnej a polovičnej veľkosti.
V textwrap sa počet znakov riadi počtom znakov, nie šírkou znaku, a jednobajtové aj dvojbajtové znaky sa považujú za jeden znak.
s = '文字文字文字文字文字文字12345,67890, 文字文字文字abcde'
print(textwrap.fill(s, 12))
# 文字文字文字文字文字文字
# 12345,67890,
# 文字文字文字abcde
Ak chcete obaliť text so zmiešanými znakmi kandži s pevnou šírkou, pozrite si nasledujúce informácie.
Skracovanie reťazcov (vynechané): shorten()
Ak chcete reťazce skrátiť a vynechať, použite funkciu shorten() v module textwrap.
Skrátené v slovných jednotkách, aby sa do nich zmestil ľubovoľný počet znakov. Počet znakov vrátane reťazca označujúceho vynechanie je ľubovoľný. Reťazec označujúci vynechanie možno nastaviť pomocou argumentu placeholder, ktorý je predvolene nastavený takto.' [...]'
s = 'Python is powerful'
print(textwrap.shorten(s, 12))
# Python [...]
print(textwrap.shorten(s, 12, placeholder=' ~'))
# Python is ~
Avšak napríklad japonské reťazce sa nedajú dobre skrátiť, pretože sa nedajú rozdeliť na slová.
s = 'Pythonについて。Pythonは汎用のプログラミング言語である。'
print(textwrap.shorten(s, 20))
# [...]
Ak chcete skrátiť len na základe počtu znakov namiesto slovných jednotiek, môžete to ľahko dosiahnuť takto.
s_short = s[:12] + '...'
print(s_short)
# Pythonについて。P...
Objekt TextWrapper
Ak sa chystáte viackrát použiť funkciu wrap() alebo fill() s pevnou konfiguráciou, je efektívne vytvoriť objekt 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 ~
Rovnaké nastavenia sa dajú použiť opakovane.