Python-д текст боодлын тусламжтайгаар мөрүүдийг боох, таслах, форматлах

Бизнес эрхэлдэг

Python хэл дээрх мөрийг дурын тооны тэмдэгтээр боож (мөр таслах) болон тайрах (товчлох) хэлбэрээр форматлахын тулд стандарт номын сангийн textwrap модулийг ашиглана уу.

Энд дараах мэдээллийг хүргэж байна.

  • Мөрийг боох (мөр хангамж):wrap(),fill()
  • Мөрүүдийг таслах (орхисон):shorten()
  • TextWrapper объект

Хэрэв та гаралтын оронд кодын олон мөрөнд урт мөр бичихийг хүсвэл дараах нийтлэлийг үзнэ үү.

Мөрийг боох (мөр хангамж):wrap(),fill()

Текст ороох модулийн wrap() функцийн тусламжтайгаар та дурын тооны тэмдэгтэнд багтах жагсаалтыг үгийн завсарлагад хуваах боломжтой.

Хоёрдахь аргументын өргөний тэмдэгтүүдийн тоог зааж өгнө үү. Өгөгдмөл нь өргөн=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']

Хүлээн авсан жагсаалтыг ашиглан та дараах зүйлийг хийснээр шинэ мөрийн кодоор таслагдсан мөрийг авч болно
\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

fill() функц нь жагсаалтын оронд шинэ мөрийг буцаана. Энэ нь дээрх жишээн дээрх wrap()-ын дараа дараах кодыг гүйцэтгэхтэй адил юм.
\n'.join(list)

Жагсаалт хэрэггүй ч тогтмол өргөнтэй мөрийг терминал руу гаргах гэх мэт тохиолдолд энэ нь илүү тохиромжтой.

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

Хэрэв max_line аргументыг зааж өгсөн бол түүнээс хойшхи мөрийн тоог хасна.

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

Хэрэв орхигдуулсан бол өгөгдмөлөөр дараах мөр төгсгөлд гарна.
[...]'

Үүнийг аргумент орлуулагчтай дурын мөрөөр сольж болно.

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

Мөн та эхний мөрийн эхэнд нэмж оруулах мөрийг initial_indent аргументаар зааж өгч болно. Үүнийг догол мөрийн эхэнд догол оруулахыг хүсвэл ашиглаж болно.

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 ~

Бүрэн болон хагас хэмжээтэй тэмдэгтүүдээс болгоомжтой байгаарай.

Textwrap-д тэмдэгтийн тоог тэмдэгтийн өргөнөөр биш харин тэмдэгтийн тоогоор удирддаг бөгөөд нэг байт ба хоёр байт тэмдэгт хоёулаа нэг тэмдэгт гэж тооцогддог.

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

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

Хэрэв та тогтмол өргөнтэй холимог ханз үсгүүдтэй бичвэрийг боохыг хүсвэл дараах зүйлийг үзнэ үү.

Мөрүүдийг таслах (орхисон):shorten()

Хэрэв та мөрүүдийг хасах, хасахыг хүсвэл textwrap модулийн shorten() функцийг ашиглана уу.

Дурын тооны тэмдэгтийг багтаах үүднээс үгийн нэгжээр товчилсон. Орхих тэмдэгтийн тоо дур зоргоороо байна. Орхихыг харуулсан мөрийг аргумент орлуулагчаар тохируулж болох бөгөөд энэ нь дараах байдлаар өгөгдмөл болно.
[...]'

s = 'Python is powerful'

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

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

Гэсэн хэдий ч, жишээ нь япон утсыг үг болгон хувааж болохгүй тул сайн товчилж болохгүй.

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

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

Хэрэв та үгийн нэгжийн оронд зөвхөн тэмдэгтийн тоог харгалзан товчлохыг хүсвэл дараах байдлаар хялбархан хүрч болно.

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

TextWrapper объект

Хэрэв та тогтсон тохиргоогоор олон удаа wrap() эсвэл дүүргэх гэж байгаа бол 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 ~

Үүнтэй ижил тохиргоог дахин ашиглах боломжтой.