Metin sarma ile Python’da dizeleri sarma, kesme ve biçimlendirme

Python’da bir dizeyi sararak (satır kesme) ve keyfi sayıda karakterle keserek (kısaltarak) biçimlendirmek için standart kitaplığın textwrap modülünü kullanın.

Aşağıdaki bilgiler burada verilmiştir.

  • Bir dize sarma (satır besleme):wrap(),fill()
  • Dizeleri kısalt (atlandı):shorten()
  • TextWrapper nesnesi

Çıktı yerine kodda birden çok satıra uzun dizeler yazmak istiyorsanız, aşağıdaki makaleye bakın.

Bir dize sarma (satır besleme):wrap(),fill()

textwrap modülünün wrap() işleviyle, rastgele sayıda karaktere sığdırmak için sözcük sonlarına bölünmüş bir liste elde edebilirsiniz.

İkinci argüman genişliği için karakter sayısını belirtin. Varsayılan genişlik=70’dir.

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']

Elde edilen listeyi kullanarak, aşağıdakileri yaparak yeni satır koduyla bölünen bir dize elde edebilirsiniz.
\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() işlevi, liste yerine yeni satır dizesi döndürür. Yukarıdaki örnekte olduğu gibi, wrap() işleminden sonra aşağıdaki kodu yürütmekle aynıdır.
\n'.join(list)

Bu, bir listeye ihtiyacınız olmadığında ancak sabit genişlikli bir dizeyi bir terminale vb. çıktılamak istediğinizde daha uygundur.

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 argümanı belirtilirse, ondan sonraki satır sayısı atlanır.

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

Atlanırsa, aşağıdaki dize varsayılan olarak sonunda çıkarılacaktır.
[...]'

Argüman yer tutucusuna sahip herhangi bir dize ile değiştirilebilir.

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

Ayrıca ilk_indent bağımsız değişkeni ile ilk satırın başına eklenecek bir dize belirtebilirsiniz. Bu, bir paragrafın başına girinti yapmak istediğinizde kullanılabilir.

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 ~

Tam boyutlu ve yarım boyutlu karakterlere dikkat edin.

Metin sarmada, karakter sayısı karakter genişliğiyle değil, karakter sayısıyla kontrol edilir ve hem tek baytlık hem de çift baytlık karakterler bir karakter olarak kabul edilir.

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

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

Karışık kanji karakterleri içeren bir metni sabit genişlikte sarmak istiyorsanız, lütfen aşağıdakilere bakın.

Dizeleri kısalt (atlandı):shorten()

Dizeleri kısaltmak ve atlamak istiyorsanız, textwrap modülünde short() işlevini kullanın.

İsteğe bağlı sayıda karaktere sığdırmak için kelime birimlerinde kısaltılmıştır. Atlamayı gösteren dize de dahil olmak üzere karakter sayısı isteğe bağlıdır. Atlamayı gösteren dize, aşağıdakine varsayılan olan bağımsız değişken yer tutucusu ile ayarlanabilir.
[...]'

s = 'Python is powerful'

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

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

Bununla birlikte, örneğin Japonca dizeler, kelimelere bölünemedikleri için iyi kısaltılamazlar.

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

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

Kelime birimleri yerine sadece karakter sayısını dikkate alarak kısaltma yapmak isterseniz aşağıdaki gibi kolaylıkla yapılabilir.

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

TextWrapper nesnesi

Sabit bir konfigürasyonla birçok kez wrap() veya fill() yapacaksanız, bir TextWrapper nesnesi oluşturmak verimlidir.

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 ~

Aynı ayarlar yeniden kullanılabilir.

Copied title and URL