HOWTO · Python

Python에서 각 단어의 첫 글자를 대문자로

이 튜토리얼은 파이썬에서 문자열에서 각 단어의 첫 글자를 대문자로 쓰는 방법을 보여줍니다

이 페이지의 내용

Python 문자열의 각 단어를 대문자로 시작하려면 제목식으로 빠르게 변환할 때는 str.title()을, 공백을 기준으로 나눈 뒤 단어 사이를 한 칸으로 합칠 때는 string.capwords()을 사용할 수 있습니다. 따옴표나 다른 접두 문자를 직접 처리해야 한다면 str.split()와 str.join()을 조합하세요. 구두점과 원래 간격을 특별히 처리해야 하는지에 따라 방법을 선택하면 됩니다. 내장 제목식 대소문자 변환 함수는 아포스트로피 뒤의 글자도 대문자로 바꿀 수 있지만, 단어를 나누고 결합하는 방법은 공백을 정규화합니다.

str.title()으로 각 단어의 첫 글자를 대문자로

문자열에 str.title()을 호출합니다. 원본은 바꾸지 않고 새 문자열을 반환하며 입력의 공백도 유지합니다. 다음 예제를 실행해 보세요.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

text = "python string methods"
print(text.title())

예제의 출력은 Python String Methods입니다. 코드와 출력에 표시된 문구는 영어 그대로 유지됩니다.

Python String Methods

str.title()은 문자가 아닌 문자 뒤의 글자를 새 단어의 시작으로 취급합니다. 따라서 구두점이 대소문자 변환에 영향을 줍니다. 예를 들어 what's에서는 아포스트로피 뒤의 s가 새 단어의 시작으로 처리되어 제목식 변환 결과가 What'S가 될 수 있습니다. 제목식 표기에는 유용하지만 영어의 일반적인 축약형이나 소유격 표기와는 다를 수 있습니다. 느낌표 같은 구두점 뒤의 글자도 대문자로 바뀝니다. 문자열을 나누지 않고 글자의 대소문자만 바꾸므로 여러 칸의 공백은 그대로 보존됩니다.

string.capwords()로 각 단어의 첫 글자를 대문자로

string.capwords()은 문자열 메서드가 아니라 Python의 string 모듈에 있는 함수입니다. 기본값인 sep=None에서는 연속된 공백을 기준으로 텍스트를 나누고, 각 단어에 str.capitalize()를 적용한 다음 단어 사이를 한 칸으로 합칩니다. 모듈을 가져온 뒤 함수를 호출하세요.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

import string

text = "python   string methods"
print(string.capwords(text))

예제의 출력도 Python String Methods입니다. 코드와 출력에 표시된 문구는 영어 그대로 유지됩니다.

Python String Methods

공백을 하나로 줄여도 괜찮을 때 편리한 방법입니다. 앞뒤 공백은 제거되고, 구분자로 쓰인 탭이나 줄바꿈도 일반 공백 한 칸으로 바뀝니다. 구분자를 전달하면 그 구분자 그대로 텍스트를 나누고 다시 합치지만, 단어 주변의 불규칙한 간격까지 보존하지는 않습니다. 기본 동작에서는 따옴표로 둘러싸인 단어의 따옴표는 남습니다. 그러나 첫 문자가 따옴표이므로 따옴표 안의 글자는 대문자로 바뀌지 않습니다. 아포스트로피를 구분자로 전달하는 것은 대개 적절하지 않습니다. 축약형이 나뉘면서 아포스트로피 뒤의 글자가 대문자로 바뀔 수 있기 때문입니다. 간단한 공백 정규화와 구두점 처리 방식이 입력에 맞을 때 이 함수를 사용하세요.

str.split()와 str.join()로 각 단어의 첫 글자를 대문자로

동작을 직접 정하려면 str.split()으로 단어를 얻고 각 단어를 변환한 다음, 구분자에 str.join()을 호출해 결과를 만드세요. 둘 다 문자열 메서드입니다. str.split()은 text.split() 호출의 타입 수준 이름이고, str.join()은 " ".join(words)와 같은 호출을 설명할 때 쓰는 이름입니다. 다음 도우미 함수는 단어 앞에 붙은 따옴표와 여는 괄호를 건너뛴 뒤 첫 글자를 대문자로 바꾸며, 나머지 글자는 그대로 둡니다.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

def capitalize_word(word):
    prefix = ""
    while word and word[0] in "'\"(":
        prefix += word[0]
        word = word[1:]
    if not word:
        return prefix
    return prefix + word[0].upper() + word[1:]

text = "'hello'   what's up?"
words = text.split()
result = " ".join(capitalize_word(word) for word in words)
print(result)

예제의 출력은 'Hello' What's Up?입니다. 코드와 출력에 표시된 문구는 영어 그대로 유지됩니다.

'Hello' What's Up?

이 방법은 'hello'를 'Hello'로 바꾸고, 공백으로 구분된 각 단어의 첫 글자만 바꾸므로 what's의 s는 소문자로 유지합니다. 데이터에 대괄호처럼 다른 여는 문자가 있다면 접두 문자 규칙을 확장하세요. 구분자를 지정하지 않고 str.split()을 호출하면 연속된 공백을 하나의 구분자로 처리하고 앞뒤 공백은 버립니다. 따라서 단일 공백으로 결합하면 여러 칸의 공백과 줄바꿈이 하나로 줄어듭니다. 텍스트의 공백을 정규화할 때는 적절하지만 원래 간격을 정확히 보존해야 한다면 맞지 않습니다. 언어별 규칙에 따라 대소문자를 처리해야 한다면 범용 메서드가 모든 언어의 단어 경계를 처리한다고 가정하지 말고 원하는 동작을 명시적으로 정의하세요.