[Programming Language]/[Python]

[Python] :: 문자열의 다양한 함수들 - format( ), upper( ), lower( ), strip( ), isOO( ), find( ), split( ), in 연산자

Semincolon 2023. 3. 31. 03:37

◎ 문자열의 다양한 함수

  제목에서 언급한 함수 이외에도 문자열에 대한 함수는 많이 존재한다. 문자열 뒤에 마침표(.)를 입력해보면 그 목록을 확인할 수 있다.

  이 많은 함수들을 다 외울 필요가 없다. 자주 쓰이는 것들은 쓰다보면 저절로 외워질 것이고 그렇지 않은 것들은 위 사진에서처럼 마침표를 찍으면 확인 가능하기 때문이다. 다양한 함수 중 주로 사용되는 함수에 대해 살펴보도록 하자.


◎ format( ) 함수

  format( ) 함수를 사용하면 숫자를 문자열로 변환할 수 있다. 중괄호({})를 사용하는데 그 형태는 아래와 같다.

a = "{}".format(10)
b = "{} {}".format(10, 20)
c = "{} {} {}".format(10, 20, 30)

  문자열로 바꾸고자 하는 숫자를 괄호안에 넣어주고 그에 해당하는 수만큼의 중괄호를 사용하면 되는 것인데 여기서 한 가지 주의사항이 있다. 괄호안의 숫자가 중괄호의 개수보다 많은 경우에는 중괄호의 개수에 해당하는 숫자만 전환되고 나머지 숫자는 짤리게 된다. 그러나 괄호안의 숫자보다 중괄호의 개수가 더 많은 경우에는 오류가 발생한다.

  format( ) 함수는 정확히 말해서 따옴표 내의 문장에 존재하는 중괄호를 괄호 안의 대응되는 숫자로 대체하는 것이므로 따옴표 내의 문장 사이에 중괄호가 존재하는 아래와 같은 형태로의 사용 또한 가능하다.

print("저는 {}살 입니다.".format(24))

  대응되는 중괄호는 다양한 형태가 가능하다. 정수나 실수를 지정하는 것도 가능하고 자릿수를 지정해서 출력하는 것도 가능하다. 그 자세한 예를 아래 코드에서 보이도록 하겠다.

1) 정수
# 1. 정수
print("{:d}".format(10))

# 1-1. 자릿수 지정 후 출력
print("{:5d}".format(10))

# 1-2. 자릿수 지정 후 빈칸은 0으로 채워 출력
print("{:05d}".format(10))

출력 결과

  {:d}로 지정하는 경우에는 뒤의 괄호 부분에 정수만 입력 가능하다. 실수를 입력하게 되면 ValueError이 발생한다. {:5d}는 총 5자리를 차지하여 오른쪽 정렬하여 출력하는 것을 뜻한다. {:05d}는 5자리를 차지하되 빈자리에는 0으로 값을 채우는 것을 뜻한다. 숫자에 기호를 붙여 출력하거나 기호 부분을 공백으로 두고 출력하는 것도 가능하다.

# 1-3. 기호 출력
print("{:+d}".format(10))	# 양수
print("{:+d}".format(-10))	# 음수

# 1-4. 기호 공백
print("{: d}".format(10))	# 양수
print("{: d}".format(-10))	# 음수

출력 결과

  {:+d}는 기호를 붙여 출력하는 것을 뜻한다. 음수인 경우에는 원래 기호가 출력되지만 양수에 + 기호를 붙여 출력하고 싶을 때 사용하면 될 듯하다. {: d}는 기호를 공백으로 출력하는 것이다. {:d}와의 차이점은 공백으로 출력하되 이것도 엄연히 한 자리를 차지한다는 것이다.

2) 실수
# 2. 실수
print("{:f}".format(1.5))
print("{:10f}".format(1.5))
print("{:010f}".format(1.5))

출력 결과

  실수는 문자 f를 사용한다. 자릿수를 차지하여 출력하고 빈자리는 0으로 채워 출력하는 것은 앞에서 살펴본 정수형과 동일하지만 실수형은 소숫점 이하 6자리를 표시한다는 특징이 있다. 만약 소숫점 자릿수까지 지정하고 싶다거나 의미가 없는 소숫점은 제거한 후 출력하고 싶다면 아래의 코드를 참고하면 된다.

# 2-1. 소숫점 자릿수 지정
print("{:10.1f}".format(1.456))
print("{:10.2f}".format(1.456))
print("{:10.3f}".format(1.456))

# 2-2. 의미 없는 소숫점 제거
print("{:g}".format(1.5))
print("{:10g}".format(1.5))

출력 결과

  소숫점 이하 자릿수를 지정하게 되면 지정한 자리까지 반올림을 하여 출력이 이뤄진다. 의미 없는 소숫점을 제거하는 것은 문자 g를 사용하고 의미없는 0은 제거되어 출력된다.


◎ 대소문자 바꾸기 : upper( ), lower( )

  이는 어려운 내용이 전혀 없다. upper( ) 함수는 문자열의 알파벳을 대문자로, lower( ) 함수는 소문자로 만든다.

str = "HELLO hello"
print(str.upper())
print(str.lower())

출력 결과


◎ 문자열 양옆의 공백 제거하기 : strip( ), lstrip( ), rstrip( )

  strip( ) 함수는 문자열 양옆의 공백을 제거한다. 기준이 되는 문자열은 맨 첫 문자와 맨 마지막 문자이다. lstrip( ) 함수는 첫 문자 기준 앞의 공백을, rstrip( ) 함수는 마지막 문자 기준 뒤의 공백을 제거한다.

str = "    Hello Python!    "
print(str.strip())
print(str.lstrip())
print(str.rstrip())

출력 결과


◎ 문자열의 구성 파악하기 : isOO( )

  문자열이 소문자로만 구성되어 있는지, 알파벳으로만 구성되어 있는지, 숫자로만 구성되어 있는지 등을 확인할 때 자주 사용하는 함수이다. 암기해두어서 나쁠 건 없는 함수들이다.

  • isalnum() : 문자열이 알파벳 또는 숫자로만 구성되어 있는지 확인.
  • isalpha() : 문자열이 알파벳으로만 구성되어 있는지 확인.
  • isidentifier() : 문자열이 식별자로 사용할 수 있는 것인지 확인.
  • isdecimal() : 문자열이 정수 형태인지 확인.
  • isdigit() : 문자열이 숫자로 인식될 수 있는 것인지 확인.
  • isspace() : 문자열이 공백으로만 구성되어 있는지 확인.
  • islower() : 문자열이 소문자로만 구성되어 있는지 확인.
  • isupper() : 문자열이 대문자로만 구성되어 있는지 확인.

  위 함수들의 출력 결과는 bool 형태로 True 또는 False이다.

str1 = "HELLO"
str2 = "hello"
str3 = "Hello10"
str4 = "123456789"

print(str1.isupper())
print(str2.islower())
print(str3.isalnum())
print(str4.isdigit())

출력 결과


◎ 문자열 찾기 : find( ), rfind( )

  문자열 내부에 특정 문자가 어디에 위치하는지 확인할 때 find( ) 함수와 rfind( ) 함수를 사용한다.

  • find( ) : 왼쪽부터 찾아서 문자가 처음 등장하는 위치 탐색.
  • rfind() : 오른쪽부터 ~
str = "방가방가"
print(str.find("방가"))
print(str.rfind("방가"))

출력 결과

  왼쪽부터 "방가"가 등장하는 위치는 0번 인덱스이므로 0이 출력되고 오른쪽부터 등장하는 위치는 2번 인덱스이므로 2가 출력된다.


◎ 문자열 자르기 : split( )

  문자열을 특정한 문자로 자를 때 사용하는 함수이다. 문자열의 분리가 필요한 경우에 주로 사용한다.

str1 = "10 20 30 40 50"
str2 = "안녕하세요"

print(str1.split(" "))
print(str2.split("하"))

출력 결과

  str1은 공백으로 분류되어 있는 문자열이다. 괄호 안의 특정 문자를 공백으로 두면 위 사진처럼 숫자를 분류할 수 있다. str2는 따로 분류되어 있지는 않은 문자열이지만 괄호 안의 특정 문자를 "하"로 두어 위 사진처럼 문자열을 반으로 분류하였다.


◎ in 연산자

  문자열 내부에 어떤 문자열이 있는지 확인할 때 사용하는 연산자이다. 앞에서 살펴본 find( ) 함수와 비슷한 맥락이긴 하지만 find( ) 함수는 찾고자 하는 문자열이 시작하는 인덱스 번호를 알려주지만 in 연산자는 찾고자 하는 문자열이 존재하면 True, 존재하지 않으면 False로 알려준다는 점에서 차이가 있다.

print("파이썬" in "C언어, Java, C++, C#, 파이썬, html, css, markdown")

출력 결과