Vefja, stytta og forsníða strengi í Python með textabroti

Viðskipti

Til að forsníða streng í Python með því að vefja (línubrot) og stytta (skammstafa) hann með handahófskenndum fjölda stafa, notaðu textabrotseininguna í staðlaða bókasafninu.

Eftirfarandi upplýsingar eru veittar hér.

  • Vefja streng (línustraumur):wrap(),fill()
  • Stytta strengi (sleppt):shorten()
  • TextWrapper hlutur

Ef þú vilt skrifa langa strengi á margar línur í kóðanum í staðin fyrir úttakið, sjáðu eftirfarandi grein.

Vefja streng (línustraumur):wrap(),fill()

Með fallinu wrap() textumbrotseiningarinnar geturðu fengið lista deilt með orðaskilum til að passa inn í handahófskenndan fjölda stafa.

Tilgreindu fjölda stafa fyrir breidd annarrar frumbreytu. Sjálfgefið er breidd=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']

Með því að nota listann sem fæst geturðu fengið streng sem er brotinn af nýlínukóða með því að gera eftirfarandi
\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

Fallið fill() skilar nýlínustreng í stað lista. Það er það sama og að keyra eftirfarandi kóða eftir wrap() eins og í dæminu hér að ofan.
\n'.join(list)

Þetta er þægilegra þegar þú þarft ekki lista en vilt senda út streng með fastri breidd í útstöð o.s.frv.

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

Ef frumbreytan max_line er tilgreind verður fjölda lína á eftir henni sleppt.

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

Ef því er sleppt, verður eftirfarandi strengur sjálfgefið birtur í lokin.
[...]'

Það er hægt að skipta út fyrir hvaða streng sem er með staðgengil röksemda.

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

Þú getur líka tilgreint streng sem á að bæta við upphaf fyrstu línu með frumbreytunni initial_indent. Þetta er hægt að nota þegar þú vilt draga inn upphaf málsgreinar.

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 ~

Farðu varlega með stafi í fullri og hálfri stærð.

Í textabroti er stafafjöldi stjórnað af fjölda stafa, ekki stafabreidd, og litið er á bæði staka og tvíbæta stafi sem einn staf.

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

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

Ef þú vilt vefja texta með blönduðum kanji-stöfum með fastri breidd, vinsamlegast skoðaðu eftirfarandi.

Stytta strengi (sleppt):shorten()

Ef þú vilt stytta og sleppa strengjum skaltu nota aðgerðina shorten() í textumbrotseiningunni.

Skammstafað í orðeiningum til að passa við handahófskenndan fjölda stafa. Fjöldi stafa, þar á meðal strengurinn sem gefur til kynna slepptingu, er handahófskennt. Hægt er að stilla strenginn sem gefur til kynna brottfallið með staðgengil röksemda, sem er sjálfgefið eftirfarandi.
[...]'

s = 'Python is powerful'

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

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

Hins vegar er til dæmis ekki hægt að stytta japanska strengi vel þar sem ekki er hægt að skipta þeim í orð.

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

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

Ef þú vilt stytta með því að huga aðeins að fjölda stafa í stað orðeininga er auðvelt að ná því fram sem hér segir.

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

TextWrapper hlutur

Ef þú ætlar að vefja() eða fylla() mörgum sinnum með fastri uppsetningu er duglegt að búa til TextWrapper hlut.

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 ~

Hægt er að endurnýta sömu stillingar.

Copied title and URL