Pag-wrap, pagputol, at pag-format ng mga string sa Python gamit ang textwrap

Negosyo

Upang i-format ang isang string sa Python sa pamamagitan ng pag-wrap (pagputol ng linya) at pagputol (pagpapaikli) nito sa isang arbitrary na bilang ng mga character, gamitin ang textwrap module ng karaniwang library.

Ang sumusunod na impormasyon ay ibinigay dito.

  • Pagbabalot ng string (line feed):wrap(),fill()
  • Putulin ang mga string (inalis):shorten()
  • object ng TextWrapper

Kung gusto mong magsulat ng mahabang string sa maraming linya sa code sa halip na sa output, tingnan ang sumusunod na artikulo.

Pagbabalot ng string (line feed):wrap(),fill()

Gamit ang function na wrap() ng textwrap module, maaari kang makakuha ng isang listahan na hinati sa mga word break upang magkasya sa isang arbitrary na bilang ng mga character.

Tukuyin ang bilang ng mga character para sa lapad ng pangalawang argumento. Ang default ay lapad=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']

Gamit ang nakuhang listahan, maaari kang makakuha ng string na nasira ng isang newline code sa pamamagitan ng paggawa ng sumusunod
\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

Ang function fill() ay nagbabalik ng newline string sa halip na isang listahan. Ito ay kapareho ng pagpapatupad ng sumusunod na code pagkatapos ng wrap() tulad ng sa halimbawa sa itaas.
\n'.join(list)

Ito ay mas maginhawa kapag hindi mo kailangan ng isang listahan ngunit nais na mag-output ng isang fixed-width na string sa isang terminal, atbp.

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

Kung ang argument na max_line ay tinukoy, ang bilang ng mga linya pagkatapos nito ay aalisin.

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

Kung aalisin, ang sumusunod na string ay magiging output sa dulo bilang default.
[...]'

Maaari itong palitan ng anumang string na may placeholder ng argumento.

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

Maaari mo ring tukuyin ang isang string na idaragdag sa simula ng unang linya na may argumentong initial_indent. Magagamit ito kapag gusto mong i-indent ang simula ng isang talata.

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 ~

Mag-ingat sa mga full-size at half-size na character.

Sa textwrap, ang bilang ng mga character ay kinokontrol ng bilang ng mga character, hindi ng lapad ng character, at parehong single-byte at double-byte na character ay itinuturing bilang isang character.

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

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

Kung gusto mong i-wrap ang isang text na may halo-halong mga character na kanji na may nakapirming lapad, mangyaring sumangguni sa sumusunod.

Putulin ang mga string (inalis):shorten()

Kung gusto mong putulin at alisin ang mga string, gamitin ang function shorten() sa textwrap module.

Pinaikli sa mga yunit ng salita upang magkasya sa isang arbitrary na bilang ng mga character. Ang bilang ng mga character, kabilang ang string na nagpapahiwatig ng pagtanggal, ay arbitrary. Ang string na nagpapahiwatig ng pagtanggal ay maaaring itakda sa placeholder ng argumento, na nagde-default sa sumusunod.
[...]'

s = 'Python is powerful'

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

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

Gayunpaman, ang mga Japanese string, halimbawa, ay hindi maaaring paikliin nang mabuti dahil hindi sila mahahati sa mga salita.

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

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

Kung gusto mong paikliin sa pamamagitan ng pagsasaalang-alang lamang sa bilang ng mga character sa halip na mga yunit ng salita, madali itong makamit tulad ng sumusunod.

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

object ng TextWrapper

Kung marami kang beses na magbalot () o punan () ng isang nakapirming pagsasaayos, mahusay na lumikha ng isang bagay na TextWrapper.

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 ~

Ang parehong mga setting ay maaaring magamit muli.

Copied title and URL