textwrap — 텍스트 래핑과 채우기

소스 코드: Lib/textwrap.py


textwrap 모듈은 모든 작업을 수행하는 클래스인 TextWrapper뿐만 아니라 몇 가지 편리 함수도 제공합니다. 한두 개의 텍스트 문자열을 래핑(wrapping)하거나 채운(filling)다면, 편리 함수로도 충분해야 합니다; 그렇지 않으면 효율을 위해 TextWrapper 인스턴스를 사용해야 합니다.

textwrap.wrap(text, width=70, **kwargs)

text(문자열)에 있는 단일 문단을 래핑해서 모든 줄의 길이가 최대 width 자가 되도록 합니다. 최종 줄 바꿈이 없는 출력 줄의 리스트를 반환합니다.

선택적 키워드 인자는 아래에 설명된 TextWrapper의 인스턴스 어트리뷰트에 해당합니다. width의 기본값은 70입니다.

wrap() 작동 방식에 대한 자세한 내용은 TextWrapper.wrap() 메서드를 참조하십시오.

textwrap.fill(text, width=70, **kwargs)

text에 있는 단일 문단을 래핑하고, 래핑 된 문단을 포함하는 단일 문자열을 반환합니다. fill()은 다음의 줄임 표현입니다

"\n".join(wrap(text, ...))

특히, fill()wrap()과 같은 키워드 인자를 받아들입니다.

textwrap.shorten(text, width, **kwargs)

주어진 width에 맞게 주어진 text를 축약하거나 자릅니다.

먼저 text에 있는 공백이 축약됩니다 (모든 공백이 단일 스페이스로 치환됩니다). 결과가 width에 맞으면 반환됩니다. 그렇지 않으면, 나머지 단어와 placeholderwidth 내에 맞도록 충분한 단어가 끝에서 삭제됩니다:

>>> textwrap.shorten("Hello  world!", width=12)
'Hello world!'
>>> textwrap.shorten("Hello  world!", width=11)
'Hello [...]'
>>> textwrap.shorten("Hello world", width=10, placeholder="...")
'Hello...'

선택적 키워드 인자는 아래에 설명된 TextWrapper의 인스턴스 어트리뷰트에 해당합니다. 텍스트가 TextWrapper fill() 함수에 전달되기 전에 공백이 축약되므로, tabsize, expand_tabs, drop_whitespacereplace_whitespace 값을 변경하는 것은 아무 효과가 없음에 유의하십시오.

버전 3.4에 추가.

textwrap.dedent(text)

text의 모든 줄에서 같은 선행 공백을 제거합니다.

이것은 삼중 따옴표로 묶은 문자열을 소스 코드에서 여전히 들여쓰기 된 형태로 제시하면서, 디스플레이의 왼쪽 가장자리에 맞추는 데 사용할 수 있습니다.

탭과 공백은 모두 공백으로 처리되지만, 이들이 같지 않음에 유의하십시오: "  hello""\thello" 줄에는 공통 선행 공백이 없는 것으로 간주합니다.

공백만 포함하는 줄은 입력에서 무시되고 출력에서 단일 개행 문자로 정규화됩니다.

예를 들면:

def test():
    # end first line with \ to avoid the empty line!
    s = '''\
    hello
      world
    '''
    print(repr(s))          # prints '    hello\n      world\n    '
    print(repr(dedent(s)))  # prints 'hello\n  world\n'
textwrap.indent(text, prefix, predicate=None)

text에서 선택된 줄의 시작 부분에 prefix를 추가합니다.

text.splitlines(True)를 호출하여 줄을 분할합니다.

기본적으로, prefix는 공백으로만 구성되지 않는 모든 줄(마지막 줄 포함)에 추가됩니다.

예를 들면:

>>> s = 'hello\n\n \nworld'
>>> indent(s, '  ')
'  hello\n\n \n  world'

선택적 predicate 인자는 어떤 줄을 들여쓰기할지 제어하는 데 사용될 수 있습니다. 예를 들어, 빈 줄과 공백만 있는 줄에도 prefix를 추가하기는 쉽습니다:

>>> print(indent(s, '+ ', lambda line: True))
+ hello
+
+
+ world

버전 3.3에 추가.

wrap(), fill()shorten()TextWrapper 인스턴스를 만들고 그것의 단일 메서드를 호출하여 작동합니다. 이 인스턴스는 재사용되지 않기 때문에, wrap() 및/또는 fill()을 사용하여 많은 텍스트 문자열을 처리하는 응용 프로그램의 경우, 여러분 자신의 TextWrapper 객체를 만드는 것이 더 효율적일 수 있습니다.

텍스트는 공백과 하이픈이 있는 단어의 하이픈 바로 뒤에서 래핑하는 것을 선호합니다; TextWrapper.break_long_words가 거짓으로 설정되어 있지 않으면 그 후에만 긴 단어를 분할합니다.

class textwrap.TextWrapper(**kwargs)

TextWrapper 생성자는 여러 개의 선택적 키워드 인자를 받아들입니다. 각 키워드 인자는 인스턴스 어트리뷰트에 해당합니다, 그래서 예를 들면

wrapper = TextWrapper(initial_indent="* ")

는 다음과 같습니다

wrapper = TextWrapper()
wrapper.initial_indent = "* "

같은 TextWrapper 객체를 여러 번 재사용 할 수 있으며, 사용 도중 인스턴스 어트리뷰트에 직접 대입하여 옵션을 변경할 수 있습니다.

TextWrapper 인스턴스 어트리뷰트(와 생성자에 대한 키워드 인자)는 다음과 같습니다:

width

(기본값: 70) 래핑 된 줄의 최대 길이. 입력 텍스트에 width보다 긴 개별 단어가 없는 한, TextWrapperwidth 문자보다 긴 출력 줄이 없음을 보장합니다.

expand_tabs

(기본값: True) 참이면, text의 모든 탭 문자가 textexpandtabs() 메서드를 사용하여 스페이스로 확장됩니다.

tabsize

(기본값: 8) expand_tabs가 참이면, text의 모든 탭 문자는 현재 열과 주어진 탭 크기에 따라 0개 이상의 스페이스로 확장됩니다.

버전 3.3에 추가.

replace_whitespace

(기본값: True) 참이면, 탭 확장 후 래핑 전에, wrap() 메서드는 각 공백 문자를 단일 스페이스로 치환합니다. 치환되는 공백 문자는 다음과 같습니다: 탭, 줄 바꿈, 세로 탭, 폼 피드 및 캐리지 리턴 ('\t\n\v\f\r').

참고

expand_tabs가 거짓이고 replace_whitespace가 참이면, 각 탭 문자는 단일 스페이스로 치환되는데, 탭 확장과는 다릅니다.

참고

replace_whitespace가 거짓이면, 줄 중간에 줄 바꿈이 나타나서 이상한 결과가 발생할 수 있습니다. 이러한 이유로, 텍스트는 (str.splitlines()나 유사한 것을 사용해서) 문단으로 분할한 후에 별도로 래핑해야 합니다.

drop_whitespace

(기본값: True) 참이면, 모든 줄의 처음과 끝의 공백(래핑 이후 들여쓰기 전)이 삭제됩니다. 문단 시작 부분의 공백은 공백이 아닌 것이 뒤에 오면 삭제되지 않습니다. 삭제되는 공백이 줄 전체를 차지하면, 줄 전체가 삭제됩니다.

initial_indent

(기본값: '') 래핑 된 출력의 첫 번째 줄 앞에 추가될 문자열입니다. 첫 번째 줄의 길이 계산에 포함됩니다. 빈 문자열은 들여 쓰지 않습니다.

subsequent_indent

(기본값: '') 첫 줄을 제외한 래핑 된 출력의 모든 줄 앞에 추가될 문자열입니다. 첫 번째 줄을 제외한 각 줄의 길이 계산에 포함됩니다.

fix_sentence_endings

(기본값: False) 참이면, TextWrapper는 문장의 끝을 감지하고 문장이 항상 정확히 두 개의 스페이스로 분리되도록 만들려고 합니다. 이것은 일반적으로 고정 폭 글꼴의 텍스트에 적합합니다. 그러나, 문장 감지 알고리즘은 불완전합니다: 문장 끝은 '.', '!' 또는 '?' 중 하나가 뒤에 오고, '"'"'" 중 하나가 뒤따르는 것도 가능, 그 뒤에 스페이스가 오는 소문자로 구성된다고 가정합니다. 이 알고리즘의 한가지 문제는 다음에 나오는 “Dr.” 와

[...] Dr. Frankenstein's monster [...]

다음에 나오는 “Spot.” 사이의 차이점을 탐지할 수 없다는 것입니다

[...] See Spot. See Spot run [...]

fix_sentence_endings는 기본적으로 거짓입니다.

문장 감지 알고리즘은 “소문자” 의 정의에 string.lowercase에 의존하고, 같은 줄에서 문장을 분리하기 위해 마침표 뒤에 두 개의 스페이스를 사용하는 규칙을 따르므로, 영어 텍스트에만 적용됩니다.

break_long_words

(기본값: True) 참이면, width보다 긴 줄이 없도록 하기 위해, width보다 긴 단어를 분할합니다. 거짓이면, 긴 단어가 깨지지 않으며, 일부 줄이 width보다 길 수 있습니다. (width를 초과하는 양을 최소화하기 위해 긴 단어는 독립된 줄에 넣습니다.)

break_on_hyphens

(기본값: True) 참이면, 래핑이, 영어에서의 관례대로, 공백과 복합 단어의 하이픈 바로 뒤에서 발생합니다. 거짓이면, 공백만을 줄 바꿈을 위한 좋은 장소로 간주하지만, 진정한 분할되지 않는 단어를 원한다면 break_long_words를 거짓으로 설정해야 합니다. 이전 버전의 기본 동작은 항상 하이픈으로 연결된 단어를 분리 할 수 있게 하는 것이었습니다.

max_lines

(기본값: None) None이 아니면, 출력은 최대 max_lines 줄을 포함하고, placeholder가 출력 끝에 나타납니다.

버전 3.4에 추가.

placeholder

(기본값: ' [...]') 잘렸을 때 출력 텍스트의 끝에 표시할 문자열.

버전 3.4에 추가.

TextWrapper는 모듈 수준 편리 함수와 유사한 몇 가지 공용 메서드도 제공합니다:

wrap(text)

text(문자열)에 있는 한 문단을 모든 줄의 길이가 최대 width 자가 되도록 래핑합니다. 모든 래핑 옵션은 TextWrapper 인스턴스의 인스턴스 어트리뷰트에서 가져옵니다. 최종 줄 바꿈이 없는 출력 줄의 리스트를 반환합니다. 래핑 된 출력에 내용이 없으면 반환된 리스트는 비어 있습니다.

fill(text)

text에 있는 단일 문단을 래핑하고, 래핑 된 문단을 포함하는 단일 문자열을 반환합니다.