Înfășurarea, trunchierea și formatarea șirurilor de caractere în Python cu textwrap

Afaceri

Pentru a formata un șir de caractere în Python prin împachetarea (întreruperea liniei) și trunchierea (abrevierea) acestuia la un număr arbitrar de caractere, utilizați modulul textwrap din biblioteca standard.

Aici sunt furnizate următoarele informații.

  • Înfășurarea unui șir de caractere (avans de linie): wrap(),fill()
  • Trunchierea șirurilor de caractere (omis): shorten()
  • Obiect TextWrapper

Dacă doriți să scrieți șiruri de caractere lungi pe mai multe linii în cod și nu în ieșire, consultați următorul articol.

Înfășurarea unui șir de caractere (avans de linie): wrap(), fill()

Cu ajutorul funcției wrap() din modulul textwrap, puteți obține o listă împărțită prin pauze de cuvânt pentru a se potrivi într-un număr arbitrar de caractere.

Specificați numărul de caractere pentru lățimea celui de-al doilea argument. Valoarea implicită este 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']

Folosind lista obținută, puteți obține un șir de caractere care este întrerupt de un cod de linie nouă, procedând astfel
'\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

Funcția fill() returnează un șir de linii noi în loc de o listă. Este același lucru cu executarea următorului cod după wrap(), ca în exemplul de mai sus.
'\n'.join(list)

Acest lucru este mai convenabil atunci când nu aveți nevoie de o listă, dar doriți să afișați un șir de caractere cu lățime fixă pe un terminal, etc.

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

În cazul în care se specifică argumentul max_line, numărul de linii de după acesta va fi omis.

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 [...]

Dacă se omite, următorul șir de caractere va fi afișat la sfârșit în mod implicit.
' [...]'

Acesta poate fi înlocuit cu orice șir de caractere cu argumentul placeholder.

print(textwrap.fill(s, 40, max_lines=2, placeholder=' ~'))
# Python can be easy to pick up whether
# you're a first time programmer or ~

De asemenea, puteți specifica un șir de caractere care să fie adăugat la începutul primei linii cu ajutorul argumentului initial_indent. Acest lucru poate fi utilizat atunci când doriți să introduceți indentarea la începutul unui paragraf.

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 ~

Aveți grijă cu caracterele de mărime mare și de mărime mică.

În textwrap, numărul de caractere este controlat de numărul de caractere, nu de lățimea caracterelor, iar atât caracterele cu un singur octet, cât și cele cu doi octeți sunt considerate ca fiind un singur caracter.

s = '文字文字文字文字文字文字12345,67890, 文字文字文字abcde'

print(textwrap.fill(s, 12))
# 文字文字文字文字文字文字
# 12345,67890,
# 文字文字文字abcde

Dacă doriți să înfășurați un text cu caractere kanji mixte cu o lățime fixă, vă rugăm să consultați următoarele.

Trunchierea șirurilor de caractere (omis): shorten()

Dacă doriți să trunchiați și să omiteți șiruri de caractere, utilizați funcția shorten() din modulul textwrap.

Abreviat în unități de cuvânt pentru a se potrivi unui număr arbitrar de caractere. Numărul de caractere, inclusiv șirul care indică omisiunea, este arbitrar. Șirul de caractere care indică omisiunea poate fi stabilit cu ajutorul argumentului „placeholder”, care are valoarea implicită următoare.
' [...]'

s = 'Python is powerful'

print(textwrap.shorten(s, 12))
# Python [...]

print(textwrap.shorten(s, 12, placeholder=' ~'))
# Python is ~

Cu toate acestea, șirurile de caractere japoneze, de exemplu, nu pot fi abreviate bine, deoarece nu pot fi împărțite în cuvinte.

s = 'Pythonについて。Pythonは汎用のプログラミング言語である。'

print(textwrap.shorten(s, 20))
# [...]

Dacă doriți să abreviați luând în considerare doar numărul de caractere în loc de unitățile de cuvânt, acest lucru poate fi realizat cu ușurință după cum urmează.

s_short = s[:12] + '...'
print(s_short)
# Pythonについて。P...

Obiect TextWrapper

Dacă aveți de gând să utilizați de mai multe ori wrap() sau fill() cu o configurație fixă, este eficient să creați un obiect 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 ~

Aceleași setări pot fi refolosite.