Python 강좌 - 문자열

Python의 문자열에 대해 다루고 있습니다.



2024. 6. 16  최초작성

2024. 6. 17 f-string, format() 메서드, % 연산자 추가




다음 글을 기반으로 작성되었습니다.

 

https://docs.python.org/ko/3/tutorial/introduction.html



포스트에서 >>>는 파이썬 인터프리터에서 실행했음을 의미합니다.




파이썬의 문자열(string)은 문자, 단어, 문장, 전체 문서 등을 포함하는 일련의 문자 시퀀스(=문자들의 나열)를 의미합니다.




문자열은 큰따옴표(")나 작은따옴표(')를 사용하여 생성할 수 있으며, 여러 줄에 걸친 문자열은 삼중 따옴표(''' 또는 """)로 생성할 수 있습니다.



하나의 작은따옴표로 문자열을 생성합니다.

>>> 'spam eggs'  

'spam eggs'



두개의 큰따옴표로 문자열을 생성합니다.

>>> "Paris rabbit got your back :)! Yay!"  

'Paris rabbit got your back :)! Yay!'



숫자를 큰따옴표나 작은따옴표로 감싸면 문자열이 됩니다. 

>>> '1975'  

'1975'



작은따옴표로 생성한 문자열에 작은따옴표를 포함시키려면  작은따옴표 앞에 \를 추가하면 됩니다.

>>> 'doesn\'t'  

"doesn't"



큰따옴표로 생성한 문자열에 큰따옴표를 포함시키려면 큰따옴표앞에 \를 추가하면 됩니다. 

>>> "\"Yes,\" they said." 

'"Yes," they said.'



작은따옴표를 사용하여 생성한 문자열에 큰따옴표를 포함할 수 있습니다.

>>> '"Yes," they said.' 

'"Yes," they said.'



큰따옴표를 사용하여 생성한 문자열에 작은따옴표를 포함할 수 있습니다. 

>>> "doesn't"

"doesn't"



문자열을 여러 줄에 걸쳐 적을 수 있습니다.  큰따옴표를 세번적은(""") 또는 작은따옴표를 세번적은(''')을 사용하여 문자열을 감싸면 됩니다.  줄 넘김 문자는 문자열에 포함됩니다. 



파이썬 쉘에서 줄바꿈 문자가 포함된 문자열을 출력하면 줄바꿈 문자가  \n으로 표시됩니다. 

>>> str = """Life

... is

... good"""

 

>>> str

'Life\nis\ngood'



print문을 사용하여 출력하면 \n대신에 줄바꿈이 출력 됩니다. 

>>> print(str)

Life

is

good



\ 뒤에 나오는 문자가 특수 문자로 취급되게 하고 싶지 않다면, 첫 따옴표 앞에 r 을 붙여주면 됩니다. r을 붙인것과 붙이지 않은 것의 출력결과가 다른 것을 볼 수 있습니다.

 

>>> print('Life\nis\ngood')

Life

is

good

 

>>> print(r'Life\nis\ngood')

Life\nis\ngood



경로를 의미하는 문자열을 출력하다보면 \n을 줄바꿈 문자로 인식하는 문제가 있습니다.

 

>>> print('C:\some\name')  

C:\some

ame



문자열 앞에 r을 붙여 \n을 줄바꿈 문자로 인식하지 않게 해야 경로가 제대로 출력됩니다.

 

>>> print(r'C:\some\name')  

C:\some\name



경로 마지막에 \가 있는 경우 작은따옴표 앞에 \ 문자가 있는게 되어 에러가 발생합니다. 

 

>>> r'C:\this\will\not\work\'

  File "<stdin>", line 1

    r'C:\this\will\not\work\'

         ^

SyntaxError: unterminated string literal (detected at line 1)



이 경우 \ 대신에 \\을 사용하면 문제가 해결됩니다.  

 

>>>'C:\\this\\will\\work\\'

'C:\\this\\will\\work\\'



+연산자를 사용하여 두 개의 문자열을 결합할 수 있습니다. 

 

>>> 'Py' + 'thon'

'Python'



*연산자를 사용하여 문자열을 반복할 수 있습니다. 

 

>>> '='*20

'===================='



두 개의 문자열을 이어서 적으면 하나의 문자열로 결합됩니다.

 

>>> 'Put several strings within parentheses '  'to have them joined together.'

'Put several strings within parentheses to have them joined together.'



문자열이 저장된 변수와 문자열을 이어서 적으면 에러가 발생합니다. 

 

>>> prefix = 'Py'

>>> prefix 'thon'

  File "<stdin>", line 1

    prefix 'thon'

           ^^^^^^

SyntaxError: invalid syntax



변수에 저장된 문자열과 문자열을 결합하려면 +연산자를 사용해야 합니다.

 

>>> prefix + 'thon'

'Python'



2개의 변수에 저장된 문자열을 결합하는 경우에도 +연산자를 사용합니다. 

 

>>> a = 'Py'

>>> b = 'thon'

>>> a+b

'Python'



문자열은 인덱스 될 수 있습니다. 첫 번째 문자가 인덱스 0에 대응됩니다. 문자를 위한 별도의 데이터 타입은 없습니다; 단순히 길이가 1인 문자열입니다:

 

>>> word = 'Python'

 

인덱스 0에 해당되는 문자는 첫번째 문자인 P입니다.

>>> word[0]  

'P'

 

인덱스 5에 해당하는 문자는 여섯번째 문자인 n입니다. 인덱스가 0부터 시작하기 때문입니다. 

>>> word[5]  # character in position 5

'n'



인덱스가 음수이면 끝에서부터 셉니다:

 

-1은 마지막 문자를 의미합니다.

>>> word[-1] 

'n'

 

-2는 뒤에서 두번째 문자를 의미합니다.

>>> word[-2]  

'o'

 

-6은 뒤에서부터 6번째 문자를 의미합니다. 

>>> word[-6]

'P'



-0과 0은 똑같이 첫번째 문자를 의미합니다. 

 

>>> word[0]

'P'

>>> word[-0]

'P'



슬라이싱(slicing)을 사용하여 부분 문자열을 얻을 수 있습니다. 

 

인덱스 0부터 인덱스 2 이전까지의 문자를 의미합니다. 범위 끝에 해당하는 인덱스는 포함하지 않음을 주의하세요.

>>> word[0:2]  

'Py'

 

인덱스 2부터 인덱스 5 이전까지의 문자를 의미합니다. 

word[2:5] 

'tho'



슬라이싱에 사용하는 인덱스를 생략하면 사용되는 기본값이 있습니다.  첫 번째 인덱스를 생략하면 기본값 0을 사용되고, 두 번째 인덱스가 생략되면 기본값으로 슬라이싱 되는 문자열의 길이가 사용됩니다.

 

인덱스 0부터 인덱스 2 이전까지의 문자를 의미합니다. 

>>> word[:2]   

'Py'

 

인덱스 4부터 문자열 마지막에 있는 문자까지를 의미합니다. 

word[4:]  

'on'



뒤에서 2번째 문자부터 문자열 마지막에 있는 문자까지를 의미합니다. 

word[-2:]  

'on'



시작 위치의 문자는 항상 포함되는 반면, 종료 위치의 문자는 항상 포함되지 않는 것에 주의하세요. 이 때문에 s[:i] + s[i:] 는 항상 s 와 같아집니다

 

>>> word[:2] + word[2:]

'Python'

 

>>> word[:4] + word[4:]

'Python'




너무 큰 값을 인덱스로 사용하면 에러가 발생합니다. 변수 word에 저장된 문자열의 최대 인덱스는 5입니다. 

 

>>> word[42] 

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

IndexError: string index out of range



범위를 벗어나는 슬라이스 인덱스는 슬라이싱할 때 에러 없이 처리됩니다:

 

>>> word[4:42]

'on'

 

>>> word[42:]

''



파이썬에서 문자열은 변경할 수 없습니다. 그래서 문자열의 인덱스로 참조한 위치에 새로운 값을 대입하려고 하면 에러가 발생합니다. 

 

>>> word[0] = 'J'

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: 'str' object does not support item assignment

word[2:] = 'py'

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: 'str' object does not support item assignment



문자열을 수정하려면 다음처럼 새로 만들어야 합니다:

 

>>> 'J' + word[1:]

'Jython'




또는 replace 메소드를 사용할 수 있습니다. 

 

>>> new_word = word.replace('P', 'J')

>>> new_word

'Jython'




내장 함수 len()을 사용하여 문자열의 길이를 얻을 수 있습니다. 

 

>>> s = 'supercalifragilisticexpialidocious'

>>> len(s)

34




문자열에 변수를 포함시키는 몇가지 방법이 있습니다.



1. f-string (Formatted String Literals)

f-string은 Python 3.6에서 도입된 포맷팅 방식으로, 문자열 안에 변수나 표현식을 삽입할 수 있도록 해줍니다.  {}안에 변수이름을 추가하는 방식이라 다른 방식에 비해 직관적입니다. 

 

 

문자열의 원하는 위치에 변수의 값을 출력해줍니다.

 

name = "Alice"
age = 30

print(f"My name is {name} and I am {age} years old.")

 

My name is Alice and I am 30 years old.



a + b 처럼 표현식을 사용할 수 있습니다. 

 

a = 5
b = 10

print(f"The sum of {a} and {b} is {a + b}.")

 

The sum of 5 and 10 is 15.



소수점 자릿수 지정 : 소수점 세번째 자리까지 출력합니다. 

 

pi = 3.14159265

print(f"Pi rounded to three decimal places: {pi:.3f}")

 

Pi rounded to three decimal places: 3.142



정수가 출력되는  자리수를 지정합니다. 5자리 숫자를 출력하는데 값이 없는 자리는 0으로 채워줍니다. 

 

number = 123

print(f"Number with leading zeros: {number:05d}")

 

Number with leading zeros: 00123




2. format() 메서드

format 메서드는 Python 3에서 사용되는 방식으로, 중괄호 {}를 사용하여 문자열 안에 변수를 삽입합니다.

 

문자열의 원하는 위치에 변수의 값을 출력합니다. format에 입력된 순서대로 {} 위치에 변수 값이 출력됩니다. 

 

name = "Alice"
age = 30

print("My name is {} and I am {} years old.".format(name, age))

 

My name is Alice and I am 30 years old.



인덱스를 이용하여 변수의 값을 출력합니다. 인덱스 0 자리엔 변수 name의 값이 출력되며 인덱스 1자리엔 변수 age의 값이 출력됩니다. 

 

name = "Alice"
age = 30

print("My name is {0} and I am {1} years old. {0} is learning Python.".format(name, age))

 

My name is Alice and I am 30 years old. Alice is learning Python.



f-string 처럼 {}안에 변수이름을 넣는 방식입니다. 

 

name = "Alice"
age = 30

print("My name is {name} and I am {age} years old.".format(name=name, age=age))

 

My name is Alice and I am 30 years old.



출력할 소수점 자리수를 지정합니다. 예제에서는 소수점 3번째 자리까지 출력합니다. 

 

pi = 3.14159265

print("Pi rounded to three decimal places: {:.3f}".format(pi))

 

Pi rounded to three decimal places: 3.142



정수가 출력되는  자리수를 지정합니다. 5자리 숫자를 출력하는데 값이 없는 자리는 0으로 채워줍니다. 

 

number = 123

print("Number with leading zeros: {:05d}".format(number))

 

Number with leading zeros: 00123




3. % 연산자

C 언어 스타일의 문자열 포맷팅을 제공합니다. % 뒤에 오는 변수 또는 튜플을 사용하여 문자열의 원하는 위치에 변수를 추가합니다. 



문자열의 원하는 위치에 변수의 값을 출력합니다. %s와 %d를 사용하여 각각 문자열과 정수를 출력할 것을 지정해줍니다.

 

name = "Alice"
age = 30

print("My name is %s and I am %d years old." % (name, age))

 

My name is Alice and I am 30 years old.



출력할 소수점 자리수를 지정합니다. 예제에서는 소수점 3번째 자리까지 출력합니다. 

 

pi = 3.14159265

print("Pi rounded to three decimal places: %.3f" % pi)

 

Pi rounded to three decimal places: 3.142



정수가 출력되는  자리수를 지정합니다. 5자리 숫자를 출력하는데 값이 없는 자리는 0으로 채워줍니다. 

 

number = 123

print("Number with leading zeros: %05d" % number)

 

Number with leading zeros: 00123



딕셔너리를 사용하는 방식입니다.

 

person = {"name": "Alice", "age": 30}

print("My name is %(name)s and I am %(age)d years old." % person)

 

My name is Alice and I am 30 years old.



 

다음 포스트에 작성된 파이썬 강좌 링크들이 모아집니다. 

 

누구나 다하는 파이썬 강좌

https://webnautes.tistory.com/2348


 

 

시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.

블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.



영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com


제가 쓴 책도 한번 검토해보세요 ^^