Chcete-li v jazyce Python formátovat řetězec zabalením (zalomením řádku) a zkrácením (zkrácením) na libovolný počet znaků, použijte modul textwrap standardní knihovny.
Zde jsou uvedeny následující informace.
- Obtékání řetězce (posuv řádku):
wrap()
,fill()
- Zkracování řetězců (vynecháno):
shorten()
- Objekt TextWrapper
Pokud chcete psát dlouhé řetězce na více řádcích v kódu místo ve výstupu, podívejte se na následující článek.
- Související články:Zápis dlouhých textových řetězců na více řádků v jazyce Python
Obtékání řetězce (posuv řádku): wrap(), fill()
Pomocí funkce wrap() modulu textwrap můžete získat seznam rozdělený podle slovních zlomů tak, aby se vešel do libovolného počtu znaků.
Zadejte počet znaků pro šířku druhého argumentu. Výchozí 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']
Pomocí získaného seznamu můžete získat řetězec, který je přerušen kódem nového řádku, následujícím způsobem.'\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
Funkce fill() vrací místo seznamu řetězec s novým řádkem. Je to stejné, jako když za funkcí wrap() provedete následující kód jako v příkladu výše.'\n'.join(list)
To je výhodnější v případech, kdy nepotřebujete seznam, ale chcete na terminál vypsat řetězec s pevnou šířkou apod.
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
Pokud je zadán argument max_line, počet řádků za ním se 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 [...]
Pokud je vynecháno, bude na konci ve výchozím nastavení vypsán následující řetězec.' [...]'
Lze jej nahradit libovolným řetězcem se zástupným argumentem.
print(textwrap.fill(s, 40, max_lines=2, placeholder=' ~'))
# Python can be easy to pick up whether
# you're a first time programmer or ~
Pomocí argumentu initial_indent můžete také zadat řetězec, který se přidá na začátek prvního řádku. To lze použít, pokud chcete odsadit začátek odstavce.
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ávejte pozor na znaky plné a poloviční velikosti.
V textwrap se počet znaků řídí počtem znaků, nikoli šířkou znaku, a jednobajtové i dvoubajtové znaky se považují za jeden znak.
s = '文字文字文字文字文字文字12345,67890, 文字文字文字abcde'
print(textwrap.fill(s, 12))
# 文字文字文字文字文字文字
# 12345,67890,
# 文字文字文字abcde
Pokud chcete zabalit text se smíšenými znaky kandži s pevnou šířkou, postupujte podle následujících pokynů.
Zkracování řetězců (vynecháno): shorten()
Pokud chcete zkracovat a vynechávat řetězce, použijte funkci shorten() v modulu textwrap.
Zkráceno na jednotky slov, aby se vešlo do libovolného počtu znaků. Počet znaků včetně řetězce označujícího vynechání je libovolný. Řetězec označující vynechání lze nastavit pomocí argumentu placeholder, který je ve výchozím nastavení následující.' [...]'
s = 'Python is powerful'
print(textwrap.shorten(s, 12))
# Python [...]
print(textwrap.shorten(s, 12, placeholder=' ~'))
# Python is ~
Například japonské řetězce však nelze dobře zkracovat, protože je nelze rozdělit na slova.
s = 'Pythonについて。Pythonは汎用のプログラミング言語である。'
print(textwrap.shorten(s, 20))
# [...]
Pokud chcete zkracovat pouze s ohledem na počet znaků namísto slovních jednotek, lze toho snadno dosáhnout následujícím způsobem.
s_short = s[:12] + '...'
print(s_short)
# Pythonについて。P...
Objekt TextWrapper
Pokud se chystáte mnohokrát použít funkci wrap() nebo fill() s pevnou konfigurací, je efektivní vytvořit 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 ~
Stejná nastavení lze použít opakovaně.