Python의 문자열 메서드

완료됨

문자열 메서드는 Python에서 가장 일반적인 메서드 형식 중 하나입니다. 때로는 정보를 추출하거나 특정 형식에 맞추기 위해 문자열을 조작해야 합니다. Python에는 가장 일반적이고 유용한 변환을 수행하도록 고안된 여러 문자열 메서드가 포함되어 있습니다.

문자열 메서드는 str 형식의 일부이며, 이는 메서드가 직접적으로 문자열 변수 또는 문자열의 일부로 존재함을 의미합니다. 예를 들어 메서드 .title()은 문자열을 처음 대문자로 반환하며, 문자열과 함께 직접 사용할 수 있습니다.

print("temperatures and facts about the moon".title())

출력: Temperatures And Facts About The Moon

또한 변수에서 동일한 동작 및 사용이 적용됩니다.

heading = "temperatures and facts about the moon"
heading_upper = heading.title()
print(heading_upper)

문자열 분할

일반적인 문자열 메서드는 .split()입니다. 인수가 없으면 메서드는 모든 공간에서 문자열을 구분합니다. 이러한 방식으로 메서드를 사용하는 경우 공백으로 구분된 모든 단어 또는 숫자 목록이 만들어집니다.

temperatures = "Daylight: 260 F Nighttime: -280 F"
temperatures_list = temperatures.split()
print(temperatures_list)

출력: ['Daylight:', '260', 'F', 'Nighttime:', '-280', 'F']

이 예제에서는 여러 줄을 처리하므로 (암시적인) 줄 바꿈 문자로 각 줄의 끝에 있는 문자열을 분할하여 단일 줄을 만들 수 있습니다.

temperatures = "Daylight: 260 F\n Nighttime: -280 F"
temperatures_list = temperatures.split('\n')
print(temperatures_list)

출력: ['Daylight: 260 F', 'Nighttime: -280 F']

이러한 유형의 분할은 정보를 처리하거나 추출하기 위해 루프가 필요하거나 텍스트 파일에서 데이터를 로드할 때 편리합니다.

문자열 검색

일부 문자열 메서드는 루프를 사용하지 않고 처리하기 전에 콘텐츠를 찾을 수 있습니다. 다양한 행성과 달의 온도에 대해 논의하는 두 문장을 가지고 있다고 가정해보세요. 그러나 달과 관련된 온도에만 관심이 있습니다. 즉, 달에 대한 문장이 아닌 경우 해당 문장을 정보를 추출하기 위해 처리해서는 안 됩니다.

주어진 단어, 문자 또는 문자 그룹이 문자열에 있는지 여부를 발견하는 가장 간단한 방법은 in 연산자를 사용하는 것입니다.

print("Moon" in "This text will describe facts and challenges with space travel")

출력: False

print("Moon" in "This text will describe facts about the Moon")

출력: True

문자열에서 특정 단어의 위치를 찾는 방법은 .find() 메서드를 사용하는 것입니다.

temperatures = """Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -28 Celsius."""
print(temperatures.find("Moon"))

출력: -1

.find() 메서드는 단어를 찾을 수 없는 경우 -1을 반환하거나 인덱스(문자열의 위치를 나타내는 숫자)를 반환합니다. 다음 예는 화성이라는 단어를 검색하는 경우 어떻게 동작하는지를 보여줍니다.

temperatures = """Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -28 Celsius."""
print(temperatures.find("Mars"))

출력: 64

64는 문자열에서 "Mars"가 나타나는 위치입니다.

콘텐츠를 검색하는 또 다른 방법은 문자열에서 특정 단어가 나오는 총 횟수를 반환하는 .count() 메서드를 사용하는 것입니다.

temperatures = """Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -28 Celsius."""
print(temperatures.count("Mars"))
print(temperatures.count("Moon"))
1
0

Python의 문자열은 대/소문자를 구분하므로 Moonmoon은 다른 단어로 간주됩니다. 대/소문자를 구분하지 않는 비교를 수행하려면 다음 .lower() 메서드를 사용하여 문자열을 모두 소문자로 변환할 수 있습니다.

print("The Moon And The Earth".lower())

출력: the moon and the earth

.lower() 메서드와 마찬가지로 문자열에는 반대로 모든 문자를 대문자로 변환하는 .upper() 메서드가 있습니다.

print("The Moon And The Earth".upper())

출력: THE MOON AND THE EARTH

콘텐츠를 검색하고 확인할 때 대/소문자로 인해 일치되지 않는 경우가 없도록 문자열을 소문자로 바꾸는 것이 좋습니다. 예를 들어 the라는 단어가 나타나는 횟수를 계산하는 경우 메서드에서는 모두 같은 단어임에도 불구하고 The가 표시되는 횟수는 계산하지 않습니다. .lower() 메서드를 사용하여 모든 문자를 소문자로 변경할 수 있습니다.

콘텐츠 점검

불규칙하게 표시되는 정보를 추출하기 위해 텍스트를 처리하는 경우가 있습니다. 예를 들어 다음 문자열은 구조화되지 않은 단락보다 더 간단하게 처리할 수 있습니다.

temperatures = "Mars Average Temperature: -60 C"

화성의 평균 온도를 추출하려면 다음 메서드를 사용하는 것이 좋습니다.

temperatures = "Mars Average Temperature: -60 C"
parts = temperatures.split(':')
print(parts)
print(parts[-1])
['Mars average temperature', ' -60 C']
' -60 C'

이전 코드는 콜론(:) 뒤의 모든 것이 온도라고 신뢰합니다. 문자열이 :에서 분할되면 두 항목의 목록이 생성됩니다. 목록에서 [-1]을 사용하면 이 예제에서 온도인 마지막 항목이 반환됩니다.

텍스트가 불규칙한 경우 동일한 분할 메서드를 사용하여 값을 가져올 수 없습니다. 항목을 반복하고 값이 특정 형식인지 확인해야 합니다. Python에는 문자열 형식을 확인하는 데 도움이 되는 메서드가 있습니다.

mars_temperature = "The highest temperature on Mars is about 30 C"
for item in mars_temperature.split():
    if item.isnumeric():
        print(item)

출력: 30

.isnumeric() 메서드와 마찬가지로 .isdecimal()은 10진수처럼 보이는 문자열을 확인할 수 있습니다.

중요

"-70".isnumeric()False를 반환한다는 사실을 알게 되면 놀랄 수 있습니다. 문자열의 모든 문자가 숫자여야 하지만 대시(-)는 숫자가 아니기 때문입니다. 문자열에서 음수를 확인해야 하는 경우 .isnumeric() 메서드가 작동하지 않습니다.

값을 확인하기 위해 문자열에 적용할 수 있는 추가 유효성 검사가 있습니다. 음수의 경우 대시는 숫자의 접두사이며 .startswith() 메서드를 사용하여 검색할 수 있습니다.

print("-60".startswith('-'))

출력: True

마찬가지로 .endswith() 메서드는 문자열의 마지막 문자를 확인하는 데 도움이 됩니다.

if "30 C".endswith("C"):
    print("This temperature is in Celsius")

출력: This temperature is in Celsius

텍스트 변환

텍스트를 다른 것으로 변환해야 하는 상황에서 도움이 되는 다른 방법이 있습니다. 지금까지 섭씨C를 사용하고 화씨F를 사용할 수 있는 문자열을 확인했습니다. .replace() 메서드를 사용하여 나오는 문자 또는 문자 그룹을 찾아 바꿀 수 있습니다.

print("Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -28 Celsius.".replace("Celsius", "C"))

출력: Saturn has a daytime temperature of -170 degrees C, while Mars has -28 C.

이전에 설명한 대로 .lower()는 대/소문자를 구분하지 않고 검색하도록 텍스트를 정규화하는 좋은 방법입니다. 일부 텍스트가 온도에 대해 설명하는지 여부를 빠르게 확인해 보겠습니다.

text = "Temperatures on the Moon can vary wildly."
print("temperatures" in text)

출력: False

text = "Temperatures on the Moon can vary wildly."
print("temperatures" in text.lower())

출력: True

항상 대/소문자를 구분하지 않고 확인할 필요는 없지만 텍스트에 대/소문자가 혼합되어 있는 경우 모든 문자를 소문자로 만드는 것이 좋습니다.

텍스트를 분할하고 변환을 수행한 후에는 모든 부분을 다시 통합해야 할 수 있습니다. .split() 메서드가 문자를 나눌 수 있는 것처럼 .join() 메서드는 문자를 다시 합칠 수 있습니다.

.join() 메서드에는 인수로 반복 가능한 개체(예: Python 목록)이 필요하므로 사용법이 다른 문자열 메서드와 다릅니다.

moon_facts = ["The Moon is drifting away from the Earth.", "On average, the Moon is moving about 4cm every year."]
print(' '.join(moon_facts))

출력: The Moon is drifting away from the Earth. On average, the Moon is moving about 4cm every year.

이 예제에서는 ' '을 사용하여 목록의 모든 항목을 조인합니다.