Szövegek felgöngyölítése, csonkítása és formázása Pythonban a textwrap segítségével

Üzleti

Ha egy karakterláncot Pythonban tetszőleges számú karakternél felgöngyölítéssel (sortöréssel) és csonkolással (rövidítéssel) szeretnénk formázni, használjuk a szabványos könyvtár textwrap modulját.

A következő információk itt találhatók.

  • Egy karakterlánc felgöngyölítése (sortovábbítás): wrap(),fill()
  • Húrok csonkítása (elhagyva): shorten()
  • TextWrapper objektum

Ha hosszú karakterláncokat szeretne több sorban írni a kódban a kimenet helyett, lásd a következő cikket.

Egy karakterlánc felgöngyölítése (sortovábbítás): wrap(), fill()

A textwrap modul wrap() függvényével egy tetszőleges karakterszámba illeszkedő, szómegszakításokkal tagolt listát kaphatunk.

Adja meg a második argumentum szélességének karakterszámát. Az alapértelmezett érték 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']

A kapott listát használva a következő módon kaphatunk egy újsor kóddal megszakított karakterláncot
'\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

A fill() függvény egy újsoros karakterláncot ad vissza lista helyett. Ez ugyanaz, mintha a fenti példában szereplő wrap() után a következő kódot hajtanánk végre.
'\n'.join(list)

Ez kényelmesebb, ha nincs szükséged listára, de egy fix szélességű karakterláncot szeretnél kiadni a terminálra, stb.

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

Ha a max_line argumentum meg van adva, az utána következő sorok száma elhagyásra kerül.

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

Ha kihagyja, akkor alapértelmezés szerint a következő karakterláncot adja ki a végén.
' [...]'

Bármilyen karakterlánccal helyettesíthető a placeholder argumentummal.

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

Az initial_indent argumentummal megadhat egy karakterláncot is, amelyet az első sor elejére kell helyezni. Ez akkor használható, ha egy bekezdés elejét szeretné behúzni.

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 ~

Legyen óvatos a teljes és félméretű karakterekkel.

A textwrapben a karakterek számát a karakterek száma szabályozza, nem pedig a karakterek szélessége, és az egybájtos és a kétbájtos karakterek is egy karakternek számítanak.

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

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

Ha egy vegyes kanji karaktereket tartalmazó szöveget szeretne fix szélességűre csomagolni, kérjük, olvassa el az alábbiakat.

Húrok csonkítása (elhagyva): shorten()

Ha rövidíteni és kihagyni szeretne karakterláncokat, használja a textwrap modulban található shorten() függvényt.

Rövidített szóegységekben, hogy tetszőleges számú karakter elférjen. A karakterek száma, beleértve a kihagyást jelző karakterláncot is, tetszőleges. A kihagyást jelző karakterláncot a placeholder argumentummal lehet beállítani, amely alapértelmezés szerint a következő.
' [...]'

s = 'Python is powerful'

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

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

A japán karakterláncokat azonban például nem lehet jól rövidíteni, mert nem lehet szavakra bontani őket.

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

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

Ha a szóegységek helyett csak a karakterek számát figyelembe véve szeretnénk rövidíteni, ez könnyen megvalósítható az alábbiak szerint.

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

TextWrapper objektum

Ha a wrap() vagy fill() funkciót sokszor fogod használni egy rögzített konfigurációval, akkor hatékony egy TextWrapper objektum létrehozása.

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 ~

Ugyanazok a beállítások újra felhasználhatók.

Copied title and URL