Stringide ümbritsemine, kärpimine ja vormindamine Pythonis textwrapiga

Äri

Selleks, et vormindada string Pythonis, mässides (reavahetades) ja kärpides (lühendades) seda suvalise arvu tähemärkide juures, kasutage standardraamatukogu moodulit textwrap.

Siin on esitatud järgmine teave.

  • Stringi ümbritsemine (reavahe): wrap(),fill()
  • Stringide kärpimine (välja jäetud): shorten()
  • TextWrapper objekt

Kui soovite kirjutada pikad stringid mitmele reale koodis, mitte väljundis, vaadake järgmist artiklit.

Stringi ümbritsemine (reavahe): wrap(), fill()

Textwrap-mooduli funktsiooni wrap() abil saate loendi, mis on jagatud sõnade katkestustega nii, et see mahub suvalise arvu tähemärkide sisse.

Määrake teise argumendi laiuse tähemärkide arv. Vaikimisi on 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']

Saadud loendi abil saate stringi, mis on katkestatud newline koodiga, tehes järgmist
'\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

Funktsioon fill() tagastab nimekirja asemel uue rea stringi. See on sama, kui käivitada järgmine kood pärast funktsiooni wrap(), nagu eespool toodud näites.
'\n'.join(list)

See on mugavam, kui te ei vaja nimekirja, kuid soovite väljastada terminali fikseeritud laiusega stringi jne.

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

Kui on määratud argument max_line, jäetakse selle järel olevate ridade arv välja.

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

Kui see jäetakse välja, siis väljastatakse vaikimisi järgmine string lõpus.
' [...]'

Selle võib asendada mis tahes stringiga, mille argumendiks on platsihoidja.

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

Samuti saate määrata stringi, mis lisatakse esimese rea algusesse argumendiga initial_indent. Seda saab kasutada siis, kui soovite lõike algust sisse tõmmata.

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 ~

Olge ettevaatlik täissuuruste ja poolsuuruste tähtedega.

Textwrapis kontrollitakse tähemärkide arvu, mitte tähemärkide laiust, ning nii ühe- kui ka kahebaidiseid tähemärke loetakse üheks tähemärgiks.

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

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

Kui soovite fikseeritud laiusega segatud kanji-märkidest koosnevat teksti ümbritseda, vaadake järgmist.

Stringide kärpimine (välja jäetud): shorten()

Kui soovite lühendada ja välja jätta stringid, kasutage textwrap-mooduli funktsiooni shorten().

Lühendatud sõnaühikutes, et mahutada suvaline arv tähemärke. Tähemärkide arv, kaasa arvatud väljajätmist tähistav string, on suvaline. Väljajätmist tähistava stringi saab määrata argumendiga placeholder, mis on vaikimisi järgmine.
' [...]'

s = 'Python is powerful'

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

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

Samas ei saa näiteks jaapani keelekombinatsioone hästi lühendada, sest neid ei saa sõnadeks jagada.

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

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

Kui soovite lühendada, võttes sõnaühikute asemel arvesse ainult tähemärkide arvu, saab seda hõlpsasti teha järgmiselt.

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

TextWrapper objekt

Kui te kavatsete wrap() või fill() funktsiooni mitu korda fikseeritud konfiguratsiooniga kasutada, on efektiivne luua 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 ~

Samu seadeid saab uuesti kasutada.

Copied title and URL