산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> python

Python 문자열 마스터하기: 생성, 포맷팅, 조작

Python 문자열

이 튜토리얼에서는 Python에서 문자열을 생성, 포맷팅, 수정, 삭제하는 방법을 배웁니다. 다양한 문자열 연산과 함수도 소개합니다.

동영상: Python 문자열

Python에서 문자열이란?

문자열은 문자들의 시퀀스입니다.

문자는 단순히 기호입니다. 예를 들어 영어는 26개 문자를 가집니다.

컴퓨터는 문자가 아닌 숫자(이진법)를 다룹니다. 화면엔 문자가 보이지만 내부적으로는 0과 1의 조합으로 저장되고 조작됩니다.

문자를 숫자로 변환하는 것을 인코딩(encoding), 역과정을 디코딩(decoding)이라고 합니다. ASCII와 Unicode가 널리 쓰이는 인코딩입니다.

Python에서 문자열은 유니코드 문자 시퀀스입니다. 유니코드는 모든 언어의 문자를 포함하고 인코딩의 통일성을 위해 도입되었습니다. Python 유니코드에서 자세히 알아보세요.


Python에서 문자열 생성하기

문자열은 홑따옴표나 쌍따옴표로 감싸 생성합니다. 삼중 따옴표도 사용 가능하며, 주로 여러 줄 문자열과 독스트링에 쓰입니다.

# Python에서 문자열 정의
# 다음 모두 동일
my_string = 'Hello'
print(my_string)
my_string = "Hello"
print(my_string)
my_string = '''Hello'''
print(my_string)
# 삼중 따옴표로 여러 줄 문자열
my_string = """Hello, welcome to the world of Python"""
print(my_string)

실행 결과:

Hello Hello Hello Hello, welcome to the world of Python

문자열 문자 접근하기

인덱싱으로 개별 문자, 슬라이싱으로 문자 범위에 접근합니다. 인덱스는 0부터 시작. 범위 초과 시 IndexError, 정수가 아닌 인덱스 시 TypeError 발생.

Python은 시퀀스에 음수 인덱싱을 허용합니다.

-1은 마지막 항목, -2는 끝에서 두 번째 등. 슬라이싱 연산자 :(콜론)으로 문자 범위 접근.

# Python에서 문자열 문자 접근
str = 'programiz'
print('str = ', str)
# 첫 문자
print('str[0] = ', str[0])
# 마지막 문자
print('str[-1] = ', str[-1])
# 2~5번째 문자 슬라이싱
print('str[1:5] = ', str[1:5])
# 6번째부터 끝에서 2번째 전까지
print('str[5:-2] = ', str[5:-2])

실행 결과:

str = programiz str[0] = p str[-1] = z str[1:5] = rogr str[5:-2] = am

범위 초과 인덱스나 정수가 아닌 인덱스 사용 시 에러:

>>> my_string[15]
...
IndexError: string index out of range
>>> my_string[1.5]
...
TypeError: string indices must be integers

슬라이싱은 인덱스가 요소 사이에 있다고 보면 이해하기 쉽습니다.

범위에 접근하려면 문자열을 자를 인덱스가 필요합니다.

Python 문자열 마스터하기: 생성, 포맷팅, 조작

문자열 변경 또는 삭제하기

문자열은 불변(immutable)입니다. 할당 후 요소 변경 불가. 같은 이름에 다른 문자열을 재할당만 가능.

>>> my_string = 'programiz'
>>> my_string[5] = 'a'
...
TypeError: 'str' object does not support item assignment
>>> my_string = 'Python'
>>> my_string
'Python'

문자열에서 문자를 삭제/제거할 수 없습니다. 하지만 del 키워드로 문자열 전체 삭제는 가능.

>>> del my_string[1]
...
TypeError: 'str' object doesn't support item deletion
>>> del my_string
>>> my_string
...
NameError: name 'my_string' is not defined

Python 문자열 연산

문자열로 수행할 수 있는 연산이 많아 Python에서 가장 많이 쓰이는 데이터 타입 중 하나입니다.

Python의 데이터 타입 더 알아보기: Python 데이터 타입

두 개 이상 문자열 연결

두 개 이상 문자열을 하나로 합치는 것을 연결(concatenation)이라고 합니다.

+ 연산자가 이를 수행. 단순히 두 문자열 리터럴을 나란히 써도 연결됩니다.

* 연산자로 문자열을 주어진 횟수만큼 반복.

# Python 문자열 연산
str1 = 'Hello'
str2 = 'World!'
# + 사용
print('str1 + str2 = ', str1 + str2)
# * 사용
print('str1 * 3 =', str1 * 3)

실행 결과:

str1 + str2 = HelloWorld! str1 * 3 = HelloHelloHello

두 문자열 리터럴을 나란히 써도 + 연산자처럼 연결됩니다.

여러 줄에 걸친 문자열 연결엔 괄호 사용:

>>> # 두 문자열 리터럴 나란히
>>> 'Hello ''World!'
'Hello World!'
>>> # 괄호 사용
>>> s = ('Hello '
... 'World')
>>> s
'Hello World'

문자열 순회하기

for 루프로 문자열 순회. 문자열에서 'l' 개수 세기 예제:

# 문자열 순회
count = 0
for letter in 'Hello World':
    if(letter == 'l'):
        count += 1
print(count, 'letters found')

실행 결과:

3 letters found

문자열 멤버십 테스트

in 키워드로 부분 문자열 존재 여부 확인.

>>> 'a' in 'program'
True
>>> 'at' not in 'battle'
False

문자열 작업용 내장 함수

시퀀스에 작동하는 다양한 내장 함수가 문자열에도 적용됩니다.

자주 쓰이는 것으로 enumerate()와 len()이 있습니다. enumerate()는 열거 객체를 반환하며, 문자열의 모든 항목에 대해 (인덱스, 값) 쌍을 담습니다. 순회에 유용. len()은 문자열 길이(문자 수) 반환.

str = 'cold'
# enumerate()
list_enumerate = list(enumerate(str))
print('list(enumerate(str)) = ', list_enumerate)
# 문자 수
print('len(str) = ', len(str))

실행 결과:

list(enumerate(str)) = [(0, 'c'), (1, 'o'), (2, 'l'), (3, 'd')] len(str) = 4

Python 문자열 포맷팅

이스케이프 시퀀스

He said, "What's there?" 같은 텍스트를 출력하려면 홑따옴표도 쌍따옴표도 쓸 수 없습니다. 텍스트 자체에 둘 다 포함되어 SyntaxError 발생.

>>> print("He said, "What's there?"")
...
SyntaxError: invalid syntax
>>> print('He said, "What's there?"')
...
SyntaxError: invalid syntax

삼중 따옴표를 쓰거나 이스케이프 시퀀스로 해결.

이스케이프 시퀀스는 백슬래시로 시작하며 다르게 해석됩니다. 홑따옴표로 문자열을 표현하면 내부의 모든 홑따옴표를 이스케이프해야 합니다. 쌍따옴표도 마찬가지. 위 텍스트를 표현하는 방법:

# 삼중 따옴표 사용
print('''He said, "What's there?"''')
# 홑따옴표 이스케이프
print('He said, "What\'s there?"')
# 쌍따옴표 이스케이프
print("He said, \"What's there?\"")

실행 결과:

He said, "What's there?" He said, "What's there?" He said, "What's there?"

Python이 지원하는 모든 이스케이프 시퀀스:

이스케이프 시퀀스설명
\newline백슬래시와 개행 무시
\\백슬래시
\'홑따옴표
\"쌍따옴표
\aASCII 벨
\bASCII 백스페이스
\fASCII 폼피드
\nASCII 라인피드(개행)
\rASCII 캐리지 리턴
\tASCII 수평 탭
\vASCII 수직 탭
\ooo8진수 값 ooo 문자
\xHH16진수 값 HH 문자

예시:

>>> print("C:\\Python32\\Lib")
C:\Python32\Lib
>>> print("This is printed\nin two lines")
This is printed
in two lines
>>> print("This is \x48\x45\x58 representation")
This is HEX representation

이스케이프 시퀀스 무시하는 Raw 문자열

문자열 내 이스케이프 시퀀스를 무시하고 싶을 땐 문자열 앞에 r 또는 R을 붙입니다. 이는 raw 문자열임을 알리며 내부의 이스케이프 시퀀스를 무시합니다.

>>> print("This is \x61 \ngood example")
This is a
good example
>>> print(r"This is \x61 \ngood example")
This is \x61 \ngood example

format() 메서드로 문자열 포맷팅

문자열 객체의 format() 메서드는 매우 다재다능하고 강력합니다. 포맷 문자열은 중괄호 {}를 플레이스홀더(치환 필드)로 사용하며 이것이 대체됩니다.

위치 인수나 키워드 인수로 순서 지정 가능.

# Python 문자열 format() 메서드
# 기본(암시적) 순서
default_order = "{}, {} and {}".format('John','Bill','Sean')
print('\n--- Default Order ---')
print(default_order)
# 위치 인수로 순서 지정
positional_order = "{1}, {0} and {2}".format('John','Bill','Sean')
print('\n--- Positional Order ---')
print(positional_order)
# 키워드 인수로 순서 지정
keyword_order = "{s}, {b} and {j}".format(j='John',b='Bill',s='Sean')
print('\n--- Keyword Order ---')
print(keyword_order)

실행 결과:

--- Default Order --- John, Bill and Sean --- Positional Order --- Bill, John and Sean --- Keyword Order --- Sean, Bill and John

format() 메서드는 선택적 포맷 명세를 가질 수 있습니다. 필드 이름과 콜론으로 구분. 예를 들어 주어진 공간에서 좌측 정렬 <, 우측 정렬 >, 가운데 정렬 ^ 가능.

정수를 이진법, 16진법 등으로 포맷하거나 실수를 반올림/지수 표기로 표시 가능. format()로 사용 가능한 모든 포맷은 여기 참조.

>>> # 정수 포맷팅
>>> "Binary representation of {0} is {0:b}".format(12)
'Binary representation of 12 is 1100'
>>> # 실수 포맷팅
>>> "Exponent representation: {0:e}".format(1566.345)
'Exponent representation: 1.566345e+03'
>>> # 반올림
>>> "One third is: {0:.3f}".format(1/3)
'One third is: 0.333'
>>> # 문자열 정렬
>>> "|{:<10}|{:^10}|{:>10}|".format('butter','bread','ham')
'|butter    |  bread   |     ham|'

구 스타일 포맷팅

C 언어의 sprintf() 스타일처럼 포맷팅 가능. % 연산자 사용.

>>> x = 12.3456789
>>> print('The value of x is %3.2f' %x)
The value of x is 12.35
>>> print('The value of x is %3.4f' %x)
The value of x is 12.3457

자주 쓰는 Python 문자열 메서드

문자열 객체엔 수많은 메서드가 있습니다. 위에서 본 format()도 그 중 하나. 흔히 쓰이는 것으로 lower(), upper(), join(), split(), find(), replace() 등이 있습니다. Python 문자열 내장 메서드 전체 목록:

>>> "PrOgRaMiZ".lower()
'programiz'
>>> "PrOgRaMiZ".upper()
'PROGRAMIZ'
>>> "This will split all words into a list".split()
['This', 'will', 'split', 'all', 'words', 'into', 'a', 'list']
>>> ' '.join(['This', 'will', 'join', 'all', 'words', 'into', 'a', 'string'])
'This will join all words into a string'
>>> 'Happy New Year'.find('ew')
7
>>> 'Happy New Year'.replace('Happy','Brilliant')
'Brilliant New Year'

python

  1. C# 문자열(String) 마스터: 기초, 연산, 고급 기법 총정리
  2. Python 딕셔너리 마스터하기: 생성, 조작, 고급 기법
  3. Java String 마스터하기: 생성, 메서드, 모범 사례
  4. Java Enum 문자열 표현 마스터: 기본값, 오버라이딩, 고급 패턴
  5. Python 문자열 연산 마스터하기: replace, join, split, reverse, 대소문자 변환
  6. Python strip() 메서드 완전 정복: 종합 가이드와 실전 예제
  7. Python str.count() 마스터하기: 문자 및 부분문자열 개수 세기 예제
  8. Python format() 문자열 마스터하기: 명확한 예제로 완전 정복
  9. Python len() 함수: 객체 길이 측정 실전 가이드
  10. Python String.find() 메서드 마스터하기: 문법, 예제, 대안 비교