Inlindning, avkortning och formatering av strängar i Python med textwrap

Företag

Om du vill formatera en sträng i Python genom att omsluta (bryta en rad) och förkorta den med ett godtyckligt antal tecken använder du modulen textwrap i standardbiblioteket.

Här finns följande information.

  • Omslagning av en sträng (radmatning): wrap(),fill()
  • Avkortning av strängar (utelämnas): shorten()
  • TextWrapper-objekt

Om du vill skriva långa strängar på flera rader i koden istället för i utmatningen kan du läsa följande artikel.

Omslagning av en sträng (radmatning): wrap(), fill()

Med funktionen wrap() i modulen textwrap kan du få en lista som är uppdelad i ordbrytningar att rymmas inom ett godtyckligt antal tecken.

Ange antalet tecken för det andra argumentet bredd. Standardvärdet är 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']

Med hjälp av den erhållna listan kan du få fram en sträng som bryts av en nyradskod genom att göra följande
'\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

Funktionen fill() returnerar en sträng med ny rad i stället för en lista. Det är samma sak som att utföra följande kod efter wrap() som i exemplet ovan.
'\n'.join(list)

Detta är mer praktiskt när du inte behöver en lista utan vill skriva ut en sträng med fast bredd till en terminal osv.

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

Om argumentet max_line anges utelämnas antalet rader efter det.

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

Om den utelämnas kommer följande sträng att skrivas ut i slutet som standard.
' [...]'

Den kan ersättas med vilken sträng som helst med argumentet 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 ~

Du kan också ange en sträng som ska läggas till i början av den första raden med argumentet initial_indent. Detta kan användas när du vill dra in början av ett stycke.

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 ~

Var försiktig med tecken i fullstorlek och halvstorlek.

I textwrap styrs antalet tecken av antalet tecken, inte av teckenbredden, och både single-byte- och double-byte-te-tecken betraktas som ett tecken.

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

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

Om du vill slå in en text med blandade kanji-tecken med en fast bredd, se nedan.

Avkortning av strängar (utelämnas): shorten()

Om du vill förkorta och utelämna strängar kan du använda funktionen shorten() i modulen textwrap.

Förkortas i ord för att passa ett godtyckligt antal tecken. Antalet tecken, inklusive den sträng som anger utelämnandet, är godtyckligt. Den sträng som anger utelämnandet kan anges med argumentet placeholder, som är standard till följande.
' [...]'

s = 'Python is powerful'

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

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

Japanska strängar, till exempel, kan dock inte förkortas på ett bra sätt eftersom de inte kan delas upp i ord.

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

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

Om du vill förkorta genom att bara ta hänsyn till antalet tecken i stället för ordenheter kan du enkelt göra det på följande sätt.

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

TextWrapper-objekt

Om du ska wrap() eller fill() många gånger med en fast konfiguration är det effektivt att skapa ett TextWrapper-objekt.

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 ~

Samma inställningar kan återanvändas.

Copied title and URL