# `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에 맞으면 반환됩니다. 그렇지 않으면, 나머지 단어와 `placeholder`가 `width` 내에 맞도록 충분한 단어가 끝에서 삭제됩니다:

      >>> 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_whitespace` 및 `replace_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`보다 긴 개별 단어가 없는 한, `TextWrapper`는 `width` 문자보다 긴 출력 줄이 없음을 보장합니다.

  `expand_tabs`

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

  `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에 있는 단일 문단을 래핑하고, 래핑 된 문단을 포함하는 단일 문자열을 반환합니다.