Source code: Lib/string.py
See also: Text Sequence Type — str
String Methods
String constants
이 모듈에 정의된 상수는 다음과 같습니다.
string.ascii_letters
아래에 설명된 ascii_lowercase 및 ascii_uppercase 상수의 연결입니다. 이 값은 로캘에 종속되지 않습니다.
string.ascii_lowercase
소문자 ‘abcdefghijklmnopqrstuvwxyz’. 이 값은 로캘에 종속되지 않으며 변경되지 않습니다.
string.ascii_uppercase
대문자 ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’. 이 값은 로캘에 종속되지 않으며 변경되지 않습니다.
string.digits
문자열 ‘0123456789’.
string.hexdigits
문자열 ‘0123456789abcdefABCDEF’.
string.octdigits
문자열 ‘01234567’.
string.punctuation
C 로케일에서 구두점 문자로 간주되는 ASCII 문자 문자열: !”#$%&'()*+,-./:;<=>?@[]^_`{|}~.
string.printable
인쇄 가능한 것으로 간주되는 ASCII 문자의 문자열입니다. 이것은 digits
, ascii_letters
, punctuation
및 whitespace
의 조합입니다.
string.whitespace
공백으로 간주되는 모든 ASCII 문자를 포함하는 문자열입니다. 여기에는 문자 공백, 탭, 라인피드, 리턴, 폼피드 및 수직 탭이 포함됩니다.
Custom String Formatting
내장 문자열 클래스는 PEP 3101에 설명된 format() 메서드를 통해 복잡한 변수 대체 및 값 형식화를 수행할 수 있는 기능을 제공합니다. 문자열 모듈의 Formatter 클래스를 사용하면 동일한 구현을 사용하여 고유한 문자열 형식화 동작을 만들고 사용자 정의할 수 있습니다. 내장 format() 메서드로.
class string.Formatter
Formatter 클래스에는 다음과 같은 공용 메서드가 있습니다.
format(format_string, /, *args, **kwargs)
기본 API 메서드입니다. 형식 문자열과 임의의 위치 및 키워드 인수 집합을 사용합니다. vformat()을 호출하는 래퍼일 뿐입니다.
버전 3.7에서 변경: 형식 문자열 인수는 이제 위치 전용입니다.
vformat(format_string, args, kwargs)
이 기능은 실제 서식 작업을 수행합니다. *args 및 **kwargs 구문을 사용하여 사전을 개별 인수로 압축 해제하고 다시 압축하는 대신 미리 정의된 인수 사전을 전달하려는 경우 별도의 함수로 노출됩니다. vformat()은 형식 문자열을 문자 데이터와 대체 필드로 나누는 작업을 수행합니다. 아래에 설명된 다양한 메서드를 호출합니다.
또한 Formatter는 하위 클래스로 대체할 여러 메서드를 정의합니다.
parse(format_string)
format_string을 반복하고 반복 가능한 튜플(literal_text, field_name, format_spec, conversion)을 반환합니다. 이는 문자열을 리터럴 텍스트 또는 대체 필드로 나누기 위해 vformat()에서 사용됩니다.
튜플의 값은 개념적으로 단일 대체 필드가 뒤따르는 리터럴 텍스트의 범위를 나타냅니다. 리터럴 텍스트가 없는 경우(2개의 대체 필드가 연속적으로 발생하는 경우 발생할 수 있음) literal_text는 길이가 0인 문자열이 됩니다. 대체 필드가 없으면 field_name, format_spec 및 conversion 값은 None이 됩니다.
get_field(field_name, args, kwargs)
parse()(위 참조)에 의해 반환된 field_name이 주어지면 서식을 지정할 개체로 변환합니다. 튜플(obj, used_key)을 반환합니다. 기본 버전은 “0[이름]” 또는 “label.title”과 같이 PEP 3101에 정의된 형식의 문자열을 사용합니다. args 및 kwargs는 vformat()에 전달됩니다. 반환 값 used_key는 get_value()에 대한 key 매개 변수와 동일한 의미를 갖습니다.
get_value(key, args, kwargs)
주어진 필드 값을 검색합니다. 키 인수는 정수 또는 문자열입니다. 정수인 경우 args에서 위치 인수의 인덱스를 나타냅니다. 문자열이면 kwargs에서 명명된 인수를 나타냅니다.
args 매개변수는 vformat()에 대한 위치 인수 목록으로 설정되고 kwargs 매개변수는 키워드 인수 사전으로 설정됩니다.
복합 필드 이름의 경우 이러한 함수는 필드 이름의 첫 번째 구성 요소에 대해서만 호출됩니다. 후속 구성 요소는 일반 특성 및 인덱싱 작업을 통해 처리됩니다.
예를 들어 필드 표현식 ‘0.name’은 get_value()가 키 인수 0으로 호출되도록 합니다. name 속성은 내장 getattr() 함수를 호출하여 get_value()가 반환된 후에 조회됩니다.
인덱스나 키워드가 존재하지 않는 항목을 참조하는 경우 IndexError 또는 KeyError 가 발생해야 합니다.
check_unused_args(used_args, args, kwargs)
원하는 경우 사용하지 않는 인수에 대한 검사를 구현하십시오. 이 함수에 대한 인수는 형식 문자열(위치 인수의 경우 정수, 명명된 인수의 경우 문자열)에서 실제로 참조된 모든 인수 키의 집합과 vformat에 전달된 args 및 kwargs에 대한 참조입니다. 미사용 인수 집합은 이러한 매개변수에서 계산할 수 있습니다. check_unused_args()는 확인에 실패하면 예외를 발생시키는 것으로 가정합니다.
format_field(value, format_spec)
format_field()는 단순히 전역 format() 내장을 호출합니다. 메서드는 하위 클래스에서 재정의할 수 있도록 제공됩니다.
convert_field(value, conversion)
변환 유형( parse() 메서드에서 반환된 튜플에서와 같이)이 지정된 값(get_field()에서 반환됨)을 변환합니다. 기본 버전은 ‘s'(str), ‘r'(repr) 및 ‘a'(ascii) 변환 유형을 이해합니다.
Format String Syntax
str.format() 메서드와 Formatter 클래스는 형식 문자열에 대해 동일한 구문을 공유합니다(Formatter의 경우 하위 클래스는 자체 형식 문자열 구문을 정의할 수 있음). 구문은 형식이 지정된 문자열 리터럴과 관련이 있지만 덜 정교하며 특히 임의의 식을 지원하지 않습니다.
형식 문자열에는 중괄호 {}로 둘러싸인 “교체 필드”가 포함됩니다. 중괄호 안에 포함되지 않은 모든 항목은 그대로 출력에 복사되는 리터럴 텍스트로 간주됩니다. 리터럴 텍스트에 중괄호 문자를 포함해야 하는 경우 {{ 및 }}를 두 번 사용하여 이스케이프할 수 있습니다.
대체 필드의 문법은 다음과 같습니다.
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"
field_name ::= arg_name ("." attribute_name | "[" element_index "]")*
arg_name ::= [identifier | digit+]
attribute_name ::= identifier
element_index ::= digit+ | index_string
index_string ::= <any source character except "]"> +
conversion ::= "r" | "s" | "a"
format_spec ::= <described in the next section>
덜 형식적인 용어로 대체 필드는 값이 형식화되어 대체 필드 대신 출력에 삽입될 개체를 지정하는 field_name으로 시작할 수 있습니다. field_name 뒤에는 선택적으로 느낌표 ‘!’가 앞에 오는 변환 필드와 콜론 ‘:’이 앞에 오는 format_spec이 옵니다. 대체 값에 대해 기본이 아닌 형식을 지정합니다.
형식 사양 미니 언어 섹션도 참조하십시오.
field_name 자체는 숫자 또는 키워드인 arg_name으로 시작합니다. 숫자이면 위치 인수를 참조하고 키워드이면 명명된 키워드 인수를 참조합니다. 형식 문자열의 숫자 arg_names가 순서대로 0, 1, 2, …인 경우 모두 생략할 수 있으며(일부만 아님) 숫자 0, 1, 2, …이 순서대로 자동으로 삽입됩니다. arg_name은 따옴표로 구분되지 않기 때문에 형식 문자열 내에서 임의의 사전 키(예: 문자열 ’10’ 또는 ‘:-]’)를 지정할 수 없습니다. arg_name 뒤에는 여러 인덱스 또는 속성 표현식이 올 수 있습니다. ‘.name’ 형식의 표현식은 getattr()을 사용하여 명명된 속성을 선택하는 반면 ‘[index]’ 형식의 표현식은 __getitem__()을 사용하여 인덱스 조회를 수행합니다.
버전 3.1에서 변경: str.format()에 대해 위치 인수 지정자를 생략할 수 있으므로 ‘{} {}’.format(a, b)는 ‘{0} {1}’.format(a, b)와 동일합니다. ).
버전 3.4에서 변경: 포매터에 대해 위치 인수 지정자를 생략할 수 있습니다.
몇 가지 간단한 형식 문자열 예:
"First, thou shalt count to {0}" # References first positional argument
"Bring me a {}" # Implicitly references the first positional argument
"From {} to {}" # Same as "From {0} to {1}"
"My quest is {name}" # References keyword argument 'name'
"Weight in tons {0.weight}" # 'weight' attribute of first positional arg
"Units destroyed: {players[0]}" # First element of keyword argument 'players'.
변환 필드는 형식을 지정하기 전에 유형 강제 변환을 일으킵니다. 일반적으로 값을 형식화하는 작업은 값 자체의 __format__() 메서드에 의해 수행됩니다. 그러나 어떤 경우에는 유형을 문자열로 강제 지정하여 자체 형식 지정 정의를 재정의하는 것이 바람직합니다. __format__()을 호출하기 전에 값을 문자열로 변환하면 일반적인 형식 논리가 무시됩니다.
현재 세 가지 변환 플래그가 지원됩니다. 값에 대해 str()을 호출하는 ‘!s’, repr()을 호출하는 ‘!r’ 및 ascii()를 호출하는 ‘!a’입니다.
몇 가지 예:
"Harold's a clever {0!s}" # Calls str() on the argument first
"Bring out the holy {name!r}" # Calls repr() on the argument first
"More {!a}" # Calls ascii() on the argument first
format_spec 필드에는 필드 너비, 정렬, 패딩, 십진수 정밀도 등과 같은 세부 정보를 포함하여 값을 표시하는 방법에 대한 사양이 포함되어 있습니다. 각 값 유형은 자체 “포맷 미니 언어” 또는 format_spec의 해석을 정의할 수 있습니다.
대부분의 기본 제공 형식은 다음 섹션에서 설명하는 공통 서식 지정 미니 언어를 지원합니다.
format_spec 필드는 그 안에 중첩된 대체 필드를 포함할 수도 있습니다. 이러한 중첩된 대체 필드에는 필드 이름, 변환 플래그 및 형식 사양이 포함될 수 있지만 더 깊은 중첩은 허용되지 않습니다. format_spec 내의 대체 필드는 format_spec 문자열이 해석되기 전에 대체됩니다. 이렇게 하면 값의 서식을 동적으로 지정할 수 있습니다.
몇 가지 예는 형식 예 섹션을 참조하세요.
Format Specification Mini-Language
“형식 사양”은 개별 값이 표시되는 방법을 정의하기 위해 형식 문자열에 포함된 대체 필드 내에서 사용됩니다(형식 문자열 구문 및 형식 문자열 리터럴 참조). 내장 format() 함수에 직접 전달할 수도 있습니다. 각 형식 지정 유형은 형식 사양을 해석하는 방법을 정의할 수 있습니다.
대부분의 기본 제공 유형은 형식 사양에 대해 다음 옵션을 구현하지만 일부 형식 지정 옵션은 숫자 유형에서만 지원됩니다.
일반적으로 빈 형식 사양은 값에 대해 str()을 호출한 것과 동일한 결과를 생성합니다. 비어 있지 않은 형식 사양은 일반적으로 결과를 수정합니다.
표준 형식 지정자의 일반적인 형식은 다음과 같습니다.
format_spec ::= [[fill]align][sign][z][#][0][width][grouping_option][.precision][type]
fill ::= <any character>
align ::= "<" | ">" | "=" | "^"
sign ::= "+" | "-" | " "
width ::= digit+
grouping_option ::= "_" | ","
precision ::= digit+
type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
유효한 정렬 값이 지정된 경우 모든 문자가 될 수 있는 채우기 문자가 앞에 올 수 있으며 생략된 경우 기본값은 공백입니다. 형식이 지정된 문자열 리터럴에서 또는 str.format() 메서드를 사용할 때 채우기 문자로 리터럴 중괄호(“{” 또는 “}”)를 사용할 수 없습니다. 그러나 중첩된 대체 필드가 있는 중괄호를 삽입할 수 있습니다. 이 제한은 format() 함수에 영향을 미치지 않습니다.
다양한 정렬 옵션의 의미는 다음과 같습니다.
Option | Meaning |
---|---|
'<' | 사용 가능한 공간 내에서 필드가 왼쪽 정렬되도록 합니다(대부분의 개체에 대한 기본값임). |
'>' | 사용 가능한 공간 내에서 필드를 강제로 오른쪽 정렬합니다(숫자의 기본값). |
'=' | 패딩이 부호(있는 경우) 뒤, 숫자 앞에 배치되도록 합니다. 이것은 ‘+000000120’ 형식의 인쇄 필드에 사용됩니다. 이 정렬 옵션은 숫자 유형에만 유효합니다. 필드 너비 바로 앞에 ‘0’이 있으면 숫자의 기본값이 됩니다. |
'^' | 사용 가능한 공간 내에서 필드가 중앙에 오도록 합니다. |
최소 필드 너비가 정의되지 않은 경우 필드 너비는 항상 채울 데이터와 동일한 크기이므로 이 경우 정렬 옵션은 의미가 없습니다.
부호 옵션은 숫자 유형에만 유효하며 다음 중 하나일 수 있습니다.
Option | Meaning |
---|---|
'+' | 양수와 음수 모두에 부호를 사용해야 함을 나타냅니다. |
'-' | 음수에만 부호를 사용해야 함을 나타냅니다(기본 동작임). |
space | 양수에는 선행 공백을 사용하고 음수에는 빼기 기호를 사용해야 함을 나타냅니다. |
‘z’ 옵션은 형식 정밀도로 반올림한 후 음수 0 부동 소수점 값을 양수 0으로 강제 변환합니다. 이 옵션은 부동 소수점 표시 유형에만 유효합니다.
버전 3.11에서 변경: ‘z’ 옵션을 추가했습니다(PEP 682도 참조).
‘#’ 옵션을 사용하면 “대체 형식”이 변환에 사용됩니다. 대체 양식은 유형에 따라 다르게 정의됩니다. 이 옵션은 정수, 실수 및 복합 유형에만 유효합니다. 정수의 경우 2진수, 8진수 또는 16진수 출력이 사용되는 경우 이 옵션은 각각의 접두사 ‘0b’, ‘0o’, ‘0x’ 또는 ‘0X’를 출력 값에 추가합니다. float 및 complex의 경우 대체 형식을 사용하면 뒤에 숫자가 없더라도 변환 결과에 항상 소수점 문자가 포함됩니다. 일반적으로 소수점 문자는 뒤에 숫자가 오는 경우에만 이러한 변환 결과에 나타납니다. 또한 ‘g’ 및 ‘G’ 변환의 경우 후행 0이 결과에서 제거되지 않습니다.
‘,’ 옵션은 천 단위 구분 기호로 쉼표를 사용했음을 나타냅니다. 로케일 인식 구분 기호의 경우 대신 ‘n’ 정수 표시 유형을 사용하십시오.
버전 3.1에서 변경: ‘,’ 옵션을 추가했습니다(PEP 378 참조).
‘_’ 옵션은 부동 소수점 표시 유형 및 정수 표시 유형 ‘d’에 대한 천 단위 구분 기호에 대한 밑줄 사용을 나타냅니다. 정수 표시 유형 ‘b’, ‘o’, ‘x’ 및 ‘X’의 경우 4자리마다 밑줄이 삽입됩니다. 다른 프레젠테이션 유형의 경우 이 옵션을 지정하는 것은 오류입니다.
버전 3.6에서 변경: ‘_’ 옵션을 추가했습니다(PEP 515도 참조).
너비는 접두사, 구분 기호 및 기타 서식 지정 문자를 포함하여 최소 전체 필드 너비를 정의하는 십진수 정수입니다. 지정하지 않으면 필드 너비는 내용에 따라 결정됩니다.
명시적인 정렬이 지정되지 않은 경우 너비 필드 앞에 0(‘0’) 문자를 추가하면 숫자 유형에 대한 부호 인식 제로 패딩이 활성화됩니다. 이는 정렬 유형이 ‘=’인 채움 문자 ‘0’과 동일합니다.
버전 3.10에서 변경: 너비 필드 앞에 ‘0’이 있어도 더 이상 문자열의 기본 정렬에 영향을 주지 않습니다.
정밀도는 프리젠테이션 유형 ‘f’ 및 ‘F’의 경우 소수점 뒤 또는 프리젠테이션 유형 ‘g’ 또는 ‘G’의 경우 소수점 전후에 표시되어야 하는 자릿수를 나타내는 십진 정수입니다. 문자열 표시 유형의 경우 필드는 최대 필드 크기, 즉 필드 콘텐츠에서 사용할 문자 수를 나타냅니다. 정수 표시 유형에는 정밀도가 허용되지 않습니다.
마지막으로 유형에 따라 데이터를 표시하는 방법이 결정됩니다.
사용 가능한 문자열 표시 유형은 다음과 같습니다.
Type | Meaning |
---|---|
's' | 문자열 형식. 문자열의 기본 유형이며 생략할 수 있습니다. |
None | ‘s’와 동일합니다. |
사용 가능한 정수 표시 유형은 다음과 같습니다.
Type | Meaning |
---|---|
'b' | 이진 형식. 2진법으로 숫자를 출력합니다. |
'c' | 성격. 인쇄하기 전에 정수를 해당 유니코드 문자로 변환합니다. |
'd' | 10진수 정수. 10진법으로 숫자를 출력합니다. |
'o' | 8진수 형식. 8진법으로 숫자를 출력합니다. |
'x' | 16진수 형식입니다. 9보다 큰 숫자에 소문자를 사용하여 16진법으로 숫자를 출력합니다. |
'X' | 16진수 형식입니다. 16진법으로 숫자를 출력하며, 9이상의 숫자는 대문자를 사용합니다. ‘#’을 지정하면 접두사 ‘0x’도 ‘0X’로 대문자가 됩니다. |
'n' | 숫자. 현재 로캘 설정을 사용하여 적절한 숫자 구분 문자를 삽입한다는 점을 제외하면 ‘d’와 동일합니다. |
None | ‘d’와 동일합니다. |
위의 표시 유형 외에도 정수는 아래에 나열된 부동 소수점 표시 유형으로 형식을 지정할 수 있습니다(‘n’ 및 없음 제외). 그렇게 할 때, float()는 서식을 지정하기 전에 정수를 부동 소수점 숫자로 변환하는 데 사용됩니다.
float 및 Decimal 값에 사용할 수 있는 표시 유형은 다음과 같습니다.
Type | Meaning |
---|---|
'e' | 과학적 표기법. 주어진 정밀도 p에 대해 지수에서 계수를 구분하는 문자 ‘e’를 사용하여 과학적 표기법으로 숫자의 형식을 지정합니다. 계수는 총 p + 1개의 유효 숫자에 대해 소수점 앞에 한 자리, 소수점 뒤에 p 자리가 있습니다. 정밀도가 지정되지 않은 경우 float에 대해 소수점 이하 6자리 정밀도를 사용하고 Decimal에 대해 모든 계수 자릿수를 표시합니다. 소수점 뒤에 숫자가 없으면 # 옵션을 사용하지 않는 한 소수점도 제거됩니다. |
'E' | 과학적 표기법. 구분 문자로 대문자 ‘E’를 사용한다는 점을 제외하면 ‘e’와 동일합니다. |
'f' | 고정 소수점 표기법. 주어진 정밀도 p에 대해 숫자를 소수점 뒤에 정확히 p 자리가 있는 십진수 형식으로 지정합니다. 정밀도가 지정되지 않은 경우 float에는 소수점 이하 6자리 정밀도를 사용하고 Decimal에는 모든 계수 자릿수를 표시할 수 있을 만큼 큰 정밀도를 사용합니다. 소수점 뒤에 숫자가 없으면 # 옵션을 사용하지 않는 한 소수점도 제거됩니다. |
'F' | 고정 소수점 표기법. ‘f’와 동일하지만 nan을 NAN으로, inf를 INF로 변환합니다. |
'g' | 일반 형식. 주어진 정밀도 p >= 1에 대해 숫자를 p 유효 숫자로 반올림한 다음 크기에 따라 결과를 고정 소수점 형식 또는 과학적 표기법으로 형식화합니다. 0의 정밀도는 1의 정밀도와 동일하게 취급됩니다. 정확한 규칙은 다음과 같습니다. 표시 유형 ‘e’ 및 정밀도 p-1로 형식화된 결과의 지수 지수가 있다고 가정합니다. 그런 다음 m <= exp < p인 경우(여기서 m은 float의 경우 -4이고 Decimals의 경우 -6임) 숫자는 표시 유형 ‘f’ 및 정밀도 p-1-exp로 형식이 지정됩니다. 그렇지 않으면 숫자는 표시 유형 ‘e’ 및 정밀도 p-1로 형식이 지정됩니다. 두 경우 모두 중요하지 않은 후행 0이 유효 숫자에서 제거되고 ‘#’ 옵션이 사용되지 않는 한 소수점 뒤에 남은 숫자가 없으면 소수점도 제거됩니다. 뜨다. Decimal의 경우 결과의 계수는 값의 계수 자릿수로 구성됩니다. 절대값이 1e-6보다 작은 값과 최하위 자릿수가 1보다 큰 값은 과학적 표기법을 사용하고 그 외에는 고정 소수점 표기법을 사용한다. 양수와 음수 무한대, 양수와 음수 0, 그리고 nans는 정밀도에 관계없이 각각 inf, -inf, 0, -0 및 nan으로 형식이 지정됩니다. |
'G' | 일반 형식. 숫자가 너무 커지면 ‘E’로 전환된다는 점을 제외하면 ‘g’와 동일합니다. 무한대와 NaN의 표현도 대문자입니다. |
'n' | 숫자. 현재 로케일 설정을 사용하여 적절한 숫자 구분 문자를 삽입한다는 점을 제외하면 ‘g’와 동일합니다. |
'%' | 백분율. 숫자에 100을 곱하고 고정(‘f’) 형식으로 표시한 다음 백분율 기호를 표시합니다. |
None | float의 경우 이것은 고정 소수점 표기법을 사용하여 결과 형식을 지정하는 경우 항상 소수점 뒤에 하나 이상의 숫자를 포함한다는 점을 제외하면 ‘g’와 동일합니다. 사용된 정밀도는 주어진 값을 충실히 표현하는 데 필요한 만큼 큽니다. Decimal의 경우 이는 현재 십진 컨텍스트에 대한 context.capitals의 값에 따라 ‘g’ 또는 ‘G’와 동일합니다. 전반적인 효과는 다음과 같습니다. 다른 형식 수정자에 의해 변경된 대로 str()의 출력과 일치합니다. |
Format examples
이 섹션에는 str.format() 구문의 예와 이전 %-포맷팅과의 비교가 포함되어 있습니다.
대부분의 경우 구문은 {}가 추가되고 % 대신 :이 사용되는 이전 %-포매팅과 유사합니다. 예를 들어 ‘%03.2f’는 ‘{:03.2f}’로 번역될 수 있습니다.
새 형식 구문은 다음 예제와 같이 새롭고 다양한 옵션도 지원합니다.
위치별로 인수에 액세스:
>>> '{0}, {1}, {2}'.format('a', 'b', 'c')
'a, b, c'
>>> '{}, {}, {}'.format('a', 'b', 'c') # 3.1+ only
'a, b, c'
>>> '{2}, {1}, {0}'.format('a', 'b', 'c')
'c, b, a'
>>> '{2}, {1}, {0}'.format(*'abc') # unpacking argument sequence
'c, b, a'
>>> '{0}{1}{0}'.format('abra', 'cad') # arguments' indices can be repeated
'abracadabra'
이름으로 인수에 액세스:
>>> 'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W')
'Coordinates: 37.24N, -115.81W'
>>> coord = {'latitude': '37.24N', 'longitude': '-115.81W'}
>>> 'Coordinates: {latitude}, {longitude}'.format(**coord)
'Coordinates: 37.24N, -115.81W'
인수 속성 액세스:
>>> c = 3-5j
>>> ('The complex number {0} is formed from the real part {0.real} '
... 'and the imaginary part {0.imag}.').format(c)
'The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0.'
>>> class Point:
... def __init__(self, x, y):
... self.x, self.y = x, y
... def __str__(self):
... return 'Point({self.x}, {self.y})'.format(self=self)
...
>>> str(Point(4, 2))
'Point(4, 2)'
인수 항목 액세스:
>>> coord = (3, 5)
>>> 'X: {0[0]}; Y: {0[1]}'.format(coord)
'X: 3; Y: 5'
%s 와 %r 바꾸기:
>>> "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2')
"repr() shows quotes: 'test1'; str() doesn't: test2"
텍스트 정렬 및 너비 지정:
>>> '{:<30}'.format('left aligned')
'left aligned '
>>> '{:>30}'.format('right aligned')
' right aligned'
>>> '{:^30}'.format('centered')
' centered '
>>> '{:*^30}'.format('centered') # use '*' as a fill char
'***********centered***********'
%+f, %-f 및 % f 교체 및 부호 지정:
>>> '{:+f}; {:+f}'.format(3.14, -3.14) # show it always
'+3.140000; -3.140000'
>>> '{: f}; {: f}'.format(3.14, -3.14) # show a space for positive numbers
' 3.140000; -3.140000'
>>> '{:-f}; {:-f}'.format(3.14, -3.14) # show only the minus -- same as '{:f}; {:f}'
'3.140000; -3.140000'
%x 및 %o를 교체하고 값을 다른 기수로 변환:
>>> # format also supports binary numbers
>>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42)
'int: 42; hex: 2a; oct: 52; bin: 101010'
>>> # with 0x, 0o, or 0b as prefix:
>>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42)
'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010'
쉼표를 천 단위 구분 기호로 사용:
>>> '{:,}'.format(1234567890)
'1,234,567,890'
백분율 표현:
>>> points = 19
>>> total = 22
>>> 'Correct answers: {:.2%}'.format(points/total)
'Correct answers: 86.36%'
유형별 서식 사용:
>>> import datetime
>>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)
>>> '{:%Y-%m-%d %H:%M:%S}'.format(d)
'2010-07-04 12:15:58'
중첩 인수 및 더 복잡한 예:
>>> for align, text in zip('<^>', ['left', 'center', 'right']):
... '{0:{fill}{align}16}'.format(text, fill=align, align=align)
...
'left<<<<<<<<<<<<'
'^^^^^center^^^^^'
'>>>>>>>>>>>right'
>>>
>>> octets = [192, 168, 0, 1]
>>> '{:02X}{:02X}{:02X}{:02X}'.format(*octets)
'C0A80001'
>>> int(_, 16)
3232235521
>>>
>>> width = 5
>>> for num in range(5,12):
... for base in 'dXob':
... print('{0:{width}{base}}'.format(num, base=base, width=width), end=' ')
... print()
...
5 5 5 101
6 6 6 110
7 7 7 111
8 8 10 1000
9 9 11 1001
10 A 12 1010
11 B 13 1011
Template strings
템플릿 문자열은 PEP 292에 설명된 대로 더 간단한 문자열 대체를 제공합니다. 템플릿 문자열의 기본 사용 사례는 국제화(i18n)입니다. 해당 컨텍스트에서 더 간단한 구문과 기능으로 인해 Python의 다른 내장된 문자열 서식 지정 기능보다 더 쉽게 번역할 수 있기 때문입니다. . i18n용 템플릿 문자열에 빌드된 라이브러리의 예는 flufl.i18n 패키지를 참조하십시오.
템플릿 문자열은 다음 규칙을 사용하여 $ 기반 대체를 지원합니다.
- $$는 이스케이프입니다. 단일 $로 대체됩니다.
- $identifier는 “식별자”의 매핑 키와 일치하는 대체 자리 표시자의 이름을 지정합니다. 기본적으로 “식별자”는 밑줄 또는 ASCII 문자로 시작하는 대소문자를 구분하지 않는 ASCII 영숫자 문자열(밑줄 포함)로 제한됩니다. $ 문자 다음의 첫 번째 비식별자 문자는 이 자리 표시자 사양을 종료합니다.
- ${identifier}는 $identifier와 동일합니다. 유효한 식별자 문자가 자리 표시자 뒤에 있지만 “${noun}ification”과 같이 자리 표시자의 일부가 아닌 경우에 필요합니다.
문자열에 $가 다른 경우 ValueError가 발생합니다.
string 모듈은 이러한 규칙을 구현하는 템플릿 클래스를 제공합니다. 템플릿의 메서드는 다음과 같습니다.
class string.Template(template)
생성자는 템플릿 문자열인 단일 인수를 사용합니다.
substitute(mapping={}, /, **kwds)
템플릿 대체를 수행하여 새 문자열을 반환합니다. 매핑은 템플릿의 자리 표시자와 일치하는 키가 있는 사전과 같은 객체입니다. 또는 키워드가 자리 표시자인 키워드 인수를 제공할 수 있습니다. 매핑과 kwds가 모두 제공되고 중복 항목이 있는 경우 kwds의 자리 표시자가 우선합니다.
safe_substitute(mapping={}, /, **kwds)
플레이스홀더가 매핑 및 kwds에서 누락된 경우 KeyError 예외를 발생시키는 대신 원래 플레이스홀더가 결과 문자열에 그대로 나타납니다. 또한, replacement()와 달리 $의 다른 모든 모양은 ValueError를 발생시키는 대신 단순히 $를 반환합니다.
다른 예외가 여전히 발생할 수 있지만 이 메서드는 예외를 발생시키는 대신 항상 사용 가능한 문자열을 반환하려고 시도하기 때문에 “안전”하다고 합니다. 다른 의미에서 safe_substitute()는 매달려 있는 구분 기호, 일치하지 않는 중괄호 또는 유효한 Python 식별자가 아닌 자리 표시자를 포함하는 잘못된 형식의 템플릿을 자동으로 무시하기 때문에 safe가 아닌 다른 것일 수 있습니다.
is_valid()
템플릿에 잘못된 자리 표시자가 있으면 false를 반환하며, 이는 replacement()에서 ValueError를 발생시킵니다.
버전 3.11의 새로운 기능.
get_identifiers()
유효하지 않은 식별자는 무시하고 템플릿의 유효한 식별자 목록을 처음 나타나는 순서대로 반환합니다.
버전 3.11의 새로운 기능.
템플릿 인스턴스는 또한 하나의 공용 데이터 속성을 제공합니다.
template
이것은 생성자의 템플릿 인수에 전달되는 객체입니다. 일반적으로 변경하면 안 되지만 읽기 전용 액세스는 적용되지 않습니다.
다음은 템플릿을 사용하는 방법의 예입니다.
>>> from string import Template
>>> s = Template('$who likes $what')
>>> s.substitute(who='tim', what='kung pao')
'tim likes kung pao'
>>> d = dict(who='tim')
>>> Template('Give $who $100').substitute(d)
Traceback (most recent call last):
...
ValueError: Invalid placeholder in string: line 1, col 11
>>> Template('$who likes $what').substitute(d)
Traceback (most recent call last):
...
KeyError: 'what'
>>> Template('$who likes $what').safe_substitute(d)
'tim likes $what
고급 사용: 템플릿의 하위 클래스를 파생하여 자리 표시자 구문, 구분 기호 또는 템플릿 문자열을 구문 분석하는 데 사용되는 전체 정규식을 사용자 지정할 수 있습니다. 이를 위해 다음 클래스 특성을 재정의할 수 있습니다.
- delimiter – 이것은 구분 기호를 도입하는 자리 표시자를 설명하는 리터럴 문자열입니다. 기본값은 $입니다. 구현 시 필요에 따라 이 문자열에서 re.escape()를 호출하므로 정규 표현식이 아니어야 합니다. 클래스 생성 후에는 구분 기호를 변경할 수 없습니다(즉, 하위 클래스의 클래스 네임스페이스에 다른 구분 기호를 설정해야 함).
- idpattern – 중괄호가 없는 자리 표시자의 패턴을 설명하는 정규식입니다. 기본값은 정규식(?a:[_a-z][_a-z0-9]*)입니다. 이것이 주어지고 braceidpattern이 None이면 이 패턴은 중괄호 자리 표시자에도 적용됩니다.
참고 기본 플래그는 re.IGNORECASE이므로 패턴 [a-z]는 일부 비ASCII 문자와 일치할 수 있습니다. 이것이 우리가 여기서 로컬 a 플래그를 사용하는 이유입니다.
버전 3.7에서 변경: braceidpattern은 중괄호 안팎에서 사용되는 별도의 패턴을 정의하는 데 사용할 수 있습니다. - braceidpattern – 이것은 idpattern과 유사하지만 중괄호 자리 표시자의 패턴을 설명합니다. 기본값은 idpattern으로 돌아가는 것을 의미하는 None입니다(즉, 중괄호 안팎에서 동일한 패턴이 사용됨). 주어진 경우, 중괄호와 중괄호가 없는 자리 표시자에 대해 서로 다른 패턴을 정의할 수 있습니다.
버전 3.7의 새로운 기능. - flags – 대체 인식에 사용되는 정규식을 컴파일할 때 적용될 정규식 플래그입니다. 기본값은 re.IGNORECASE입니다. re.VERBOSE는 항상 플래그에 추가되므로 사용자 지정 idpatterns는 자세한 정규식에 대한 규칙을 따라야 합니다.
버전 3.2의 새로운 기능.
또는 클래스 특성 패턴을 재정의하여 전체 정규식 패턴을 제공할 수 있습니다. 이 작업을 수행하는 경우 값은 4개의 명명된 캡처링 그룹이 있는 정규식 개체여야 합니다. 캡처 그룹은 잘못된 자리 표시자 규칙과 함께 위에 지정된 규칙에 해당합니다.
- escaped – 이 그룹은 이스케이프 시퀀스와 일치합니다. $$, 기본 패턴.
- named – 이 그룹은 중괄호가 없는 자리 표시자 이름과 일치합니다. 캡처 그룹에 구분 기호를 포함하면 안 됩니다.
- braced – 이 그룹은 중괄호로 묶인 자리 표시자 이름과 일치합니다. 캡처 그룹에 구분 기호나 중괄호를 포함하면 안 됩니다.
- invalid – 이 그룹은 다른 모든 구분 기호 패턴(일반적으로 단일 구분 기호)과 일치하며 정규식에서 마지막에 나타나야 합니다.
이 클래스의 메서드는 이름이 지정된 그룹 중 하나가 일치하지 않고 패턴이 템플릿과 일치하는 경우 ValueError를 발생시킵니다.
Helper functions
string.capwords(s, sep=None)
str.split()을 사용하여 인수를 단어로 분할하고 str.capitalize()를 사용하여 각 단어를 대문자로 표시하고 str.join()을 사용하여 대문자로 표시된 단어를 연결합니다. 선택적 두 번째 인수 sep가 없거나 None이면 공백 문자가 단일 공백으로 대체되고 선행 및 후행 공백이 제거됩니다. 그렇지 않으면 sep를 사용하여 단어를 분할하고 결합합니다.