Merkkijonojen kääriminen, katkaiseminen ja muotoilu Pythonissa textwrapin avulla

liiketoiminta

Jos haluat muotoilla merkkijonon Pythonissa käärimällä (rivinvaihtamalla) ja lyhentämällä (lyhentämällä) sen mielivaltaiseen merkkimäärään, käytä standardikirjaston textwrap-moduulia.

Seuraavat tiedot annetaan tässä.

  • Merkkijonon kääriminen (rivinsyöttö): wrap(),fill()
  • Katkaise merkkijonot (pois jätetty): shorten()
  • TextWrapper-objekti

Jos haluat kirjoittaa pitkiä merkkijonoja useammalle riville koodiin eikä tulosteeseen, katso seuraava artikkeli.

Merkkijonon kääriminen (rivinsyöttö): wrap(), fill()

Textwrap-moduulin funktiolla wrap() voit saada sanakatkoilla jaetun luettelon mahtumaan mielivaltaiseen merkkimäärään.

Määritä toisen argumentin leveyden merkkimäärä. Oletusarvo 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']

Saadun listan avulla voit saada merkkijonon, joka on katkennut rivinvaihtokoodilla, seuraavasti
'\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

Funktio fill() palauttaa uuden rivin merkkijonon listan sijasta. Se on sama kuin seuraavan koodin suorittaminen wrap():n jälkeen kuten yllä olevassa esimerkissä.
'\n'.join(list)

Tämä on kätevämpää, kun et tarvitse listaa, mutta haluat tulostaa kiinteän levyisen merkkijonon terminaaliin 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

Jos argumentti max_line on määritetty, sen jälkeiset rivit jätetään pois.

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

Jos se jätetään pois, tulostetaan oletusarvoisesti seuraava merkkijono loppuun.
' [...]'

Se voidaan korvata millä tahansa merkkijonolla argumentilla 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 ~

Voit myös määrittää ensimmäisen rivin alkuun lisättävän merkkijonon argumentilla initial_indent. Tätä voidaan käyttää, kun halutaan sisennys kappaleen alkuun.

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 ~

Ole varovainen täysikokoisten ja puolikokoisten merkkien kanssa.

Textwrapissa merkkien määrää ohjaa merkkien lukumäärä, ei merkin leveys, ja sekä yhden että kahden tavun merkkejä pidetään yhtenä merkkinä.

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

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

Jos haluat paketoida tekstiä, jossa on sekalaisia kanji-merkkejä kiinteällä leveydellä, katso seuraavaa.

Katkaise merkkijonot (pois jätetty): shorten()

Jos haluat lyhentää ja jättää merkkijonoja pois, käytä textwrap-moduulin funktiota shorten().

Lyhennetty sanayksiköissä, jotta mahtuu mielivaltainen määrä merkkejä. Merkkien määrä, mukaan lukien poisjättämistä osoittava merkkijono, on mielivaltainen. Puuttumista osoittava merkkijono voidaan asettaa argumentilla placeholder, joka on oletusarvoisesti seuraava.
' [...]'

s = 'Python is powerful'

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

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

Esimerkiksi japaninkielisiä merkkijonoja ei kuitenkaan voi lyhentää hyvin, koska niitä ei voi jakaa sanoiksi.

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

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

Jos haluat lyhentää ottamalla huomioon vain merkkien määrän sanayksiköiden sijasta, se onnistuu helposti seuraavasti.

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

TextWrapper-objekti

Jos aiot käyttää wrap() tai fill() -toimintoa monta kertaa kiinteällä kokoonpanolla, on tehokasta luoda TextWrapper-olio.

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 ~

Samoja asetuksia voidaan käyttää uudelleen.

Copied title and URL