Omatanje, skraćivanje i oblikovanje nizova u Pythonu s prelamanjem teksta

Poslovanje

Za formatiranje niza u Pythonu prelamanjem (prekidanjem reda) i skraćivanjem (skraćenjem) na proizvoljan broj znakova, upotrijebite modul textwrap standardne biblioteke.

Ovdje su navedene sljedeće informacije.

  • Omatanje niza (prevod reda):wrap(),fill()
  • Skratiti nizove (izostavljeno):shorten()
  • TextWrapper objekt

Ako želite napisati dugačke nizove u više redaka u kodu umjesto u izlazu, pogledajte sljedeći članak.

Omatanje niza (prevod reda):wrap(),fill()

S funkcijom wrap() modula textwrap, možete dobiti popis podijeljen prijelomima riječi kako bi stao u proizvoljan broj znakova.

Odredite broj znakova za širinu drugog argumenta. Zadana je širina=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']

Koristeći dobiveni popis, možete dobiti niz koji je prekinut kodom za novi red na sljedeći način
\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

Funkcija fill() vraća niz za novi red umjesto popisa. To je isto kao i izvršavanje sljedećeg koda nakon wrap() kao u gornjem primjeru.
\n'.join(list)

Ovo je praktičnije kada vam ne treba popis, ali želite ispisati niz fiksne širine na terminal, itd.

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

Ako je naveden argument max_line, broj redaka nakon njega bit će izostavljen.

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

Ako se izostavi, sljedeći niz će se prema zadanim postavkama prikazati na kraju.
[...]'

Može se zamijeniti bilo kojim nizom s rezerviranim mjestom za argument.

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

Također možete odrediti niz koji će se dodati na početak prvog retka s argumentom initial_indent. Ovo se može koristiti kada želite uvući početak odlomka.

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 ~

Budite oprezni s likovima u punoj i polovičnoj veličini.

U prelamanju teksta, broj znakova kontrolira se brojem znakova, a ne širinom znakova, a i jednobajtni i dvobajtni znakovi smatraju se jednim znakom.

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

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

Ako želite premotati tekst s pomiješanim znakovima kanji s fiksnom širinom, pogledajte sljedeće.

Skratiti nizove (izostavljeno):shorten()

Ako želite skratiti i izostaviti nizove, koristite funkciju shorten() u modulu textwrap.

Skraćeno u jedinicama riječi kako bi odgovaralo proizvoljnom broju znakova. Broj znakova, uključujući niz koji označava izostavljanje, je proizvoljan. Niz koji ukazuje na izostavljanje može se postaviti pomoću rezerviranog mjesta za argument, koji je zadana vrijednost na sljedeće.
[...]'

s = 'Python is powerful'

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

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

Međutim, japanske žice, na primjer, ne mogu se dobro skratiti jer se ne mogu podijeliti u riječi.

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

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

Ako želite skratiti uzimajući u obzir samo broj znakova umjesto jedinica riječi, to se lako može postići na sljedeći način.

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

TextWrapper objekt

Ako ćete wrap() ili fill() mnogo puta s fiksnom konfiguracijom, učinkovito je stvoriti TextWrapper objekt.

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 ~

Iste postavke mogu se ponovno koristiti.