1. 문자열
텍스트 데이터를 표현하기 위해서 사용됩니다.
1.1 문자열 생성
작은따옴표 (' '), 큰따옴표 (" ") 또는 세 개의 따옴표 (''' ''') , (""" """)를 사용하여 생성 가능합니다.
1.1.1 작은 따옴표와 큰따옴표
가장 기본적 문자열 표현 방식이고 주로 한 줄짜리 문자열을 정의할 때 사용
두 개중 어떤것을 사용해도 된다. 하지만 ' ' , " " 으로만 사용가능 ' " , " ' 같은 형식은 안된다.
그리고 따옴표 안에 다른 따옴표를 포함하고 싶을때는 이스케이프 문자(\)를 사용해서 할 수 있다.
s1 = 'Hello'
s2 = "World"
s3 = " \\'작은 따옴표 표시 방법\\' "
1.1.2 삼중 따옴표
여러 줄에 걸친 문자열을 정의할 때 주로 사용한다.
\n(줄바꿈)을 추가하지 않아도 자동으로 줄바꿈을 해준다.
multi_line_string = '''이것은 여러 줄에
걸친 문자열입니다.
작은따옴표(')와 큰따옴표(")를
이스케이프 없이 사용할 수 있습니다.'''
1.2 이스케이프 시퀀스
문자열 내에서 특수 문자를 표현하거나 특정 작업을 실행시키기 위해서 사용되는 문자이다.
대부분의 프로그래밍 언어에서 백슬래시(\) 뒤에 오는 문자의 조합으로 구성된다.
\\n: 줄바꿈(newline). 커서를 다음 줄로 이동시킵니다.
\\t: 탭(tab). 일정한 간격으로 띄웁니다.
\\: 백슬래시() 문자 자체를 나타냅니다.
\\': 작은따옴표(')를 문자열 내에서 표시합니다.
\\": 큰따옴표(")를 문자열 내에서 표시합니다.
\\r: 캐리지 리턴(carriage return). 줄의 처음으로 커서를 이동시킵니다.
\\b: 백스페이스(backspace). 커서를 한 칸 왼쪽으로 이동시키고 그 위치의 문자를 삭제합니다.
\\f: 폼 피드(form feed). 새 페이지로 이동합니다. 프린터에서 주로 사용됩니다.
\\ooo: 8진수 값 ooo에 해당하는 문자를 나타냅니다. 예를 들어, \\141은 'a'를 나타냅니다.
\\xhh: 16진수 값 hh에 해당하는 문자를 나타냅니다. 예를 들어, \\x61은 'a'를 나타냅니다.
print("줄을 바꾸려면 \\\\n을 사용합니다.\\n이렇게요.")
print("탭은 \\\\t를 사용합니다.\\t이렇게요.")
print("따옴표를 출력하려면 \\\\' 또는 \\\\\\"을 사용합니다.")
1.3 인덱싱과 슬라이싱
문자열의 특정 부분에 접근하거나 문자열의 일부를 추출할 때 사용한다.
1.3.1 문자열 인덱싱
특정 위치의 문자에 접근하는 것을 의미한다.
파이썬에서는 첫 번째 문자의 위치를 0으로 시작하는 인덱스를 사용한다.
음수 인덱싱도 지원하며 -1은 문자열의 마지막 문자이다.
s = "Python"
print(s[0])# 'P' 출력
print(s[5])# 'n' 출력
print(s[-1])# 'n' 출력, 마지막 문자
print(s[-2])# 'o' 출력, 끝에서 두 번째 문자
1.3.2 문자열 슬라이싱
문자열의 일부분을 추출하는 기능이다.
[시작 인덱스 : 끝 인덱스] 의 형태로 사용한다.
시작 인덱스는 포함되지만 끝 인덱스의 문자는 포함되지 않는다.
s = "Python programming"
print(s[0:6])# 'Python' 출력
print(s[7:11])# 'prog' 출력
print(s[:6])# 'Python' 출력, 처음부터 6번째 인덱스 전까지
print(s[7:])# 'programming' 출력, 7번째 인덱스부터 끝까지
print(s[:])# 'Python programming' 출력, 전체 문자열
print(s[-11:-7])# 'prog' 출력, 끝에서 11번째부터 끝에서 7번째 인덱스 전까지
또한 인덱스 간격을 지정할 수 있다.
[시작 인덱스: 끝 인덱스 : 간격]
s = "Python programming"
print(s[::2])# 'Pto rgamn' 출력, 각 문자 사이를 건너뛰어 출력
print(s[::-1])# 'gnimmargorp nohtyP' 출력, 문자열을 거꾸로 출력
1.4 문자열 메소드
문자열을 효율적으로 처리할 수 있다.
1.4.1 find() 와 index()
- find() 메서드
- 문자열에서 첫 번째 발견 위치를 반환
- 찾는 문자나 문자열이 없다면 -1 반환
- 문자열.find(찾는문자, 시작인덱스, 끝인덱스) 형식으로 사용
- 시작인덱스, 끝인덱스는 없으면 문자열의 처음부터 끝까지 검색
- index() 메서드
- 문자열에서 첫 번째 발견 위치를 반환
- 찾는 문자나 문자열이 없으면 ValueError 예외 발생
- 문자열.index(찾는문자, 시작 인덱스, 끝인덱스) 형식으로 사용
- 시작인덱스, 끝인덱스가 없으면 문자열의 처음부터 끝까지 검색
s = "Hello, world!"
# find() 사용 예
print(s.find("world"))# 7 출력
print(s.find("Python"))# -1 출력 (찾는 문자열이 없으므로)# index() 사용 예
print(s.index("world"))# 7 출력try:
print(s.index("Python"))# ValueError 발생except ValueError:
print("문자열을 찾을 수 없습니다.")
1.4.2 replace()
문자열의 일부를 다른 문자열로 대체한다.
기본구조
- 문자열 내의 특정 문자열을 다른 문자열로 바꾼다.
- old : 대체되어야 하는 문자열
- new : old를 대체할 문자열
- count(선택) : 대체가 발생할 최대 횟수 지정
str.replace(old, new, count)
1.4.3 split() 메소드
문자열을 분할해서 리스트로 변환하는데 사용한다.
지정된 분리자를 기준으로 문자열을 분할하고 각 문자열을 포함하는 리스트를 반환한다.
- sep: 분리자로 사용될 문자이다. 기본적으로 모든 공백 문자를 분리자로 사용
- maxsplit: 분할의 최대 횟수 지정
str.split(sep=None, maxsplit=-1)
text = "Python is fun"
# 공백을 기준으로 분할
words = text.split()
print(words)# ['Python', 'is', 'fun']# 특정 문자를 기준으로 분할
text = "apple,banana,cherry"
fruits = text.split(',')
print(fruits)# ['apple', 'banana', 'cherry']# maxsplit 사용
text = "Python is very fun"
parts = text.split(' ', 1)
print(parts)# ['Python', 'is very fun']
1.4.4 join() 메소드
문자열을 결합하는 데 사용된다.
문자열 리스트나 튜플 같은 iterable 객체의 요소들을 특정 구분자를 사용해서 연결할 때 사용
- separator: 결합될 때 각 문자열 사이에 놓일 문자
- iterable: 연결될 문자열들의 컬렉션이다.
separator.join(iterable)
# 리스트의 문자열을 공백으로 연결
words = ['Python', 'is', 'awesome']
sentence = ' '.join(words)
print(sentence)# 출력: Python is awesome# 리스트의 문자열을 쉼표와 공백으로 연결
fruits = ['apple', 'banana', 'cherry']
fruit_list = ', '.join(fruits)
print(fruit_list)# 출력: apple, banana, cherry# 뉴라인 문자를 사용하여 문자열 연결
lines = ['First line', 'Second line', 'Third line']
paragraph = '\n'.join(lines)
print(paragraph)
# 출력:
# First line
# Second line
# Third line
1.4.5 strip(), lstrip(), rstrip() 메소드
- strip() 메서드
- 문자열의 시작과 끝에서 지정된 문자열 제거
- str.strip([chars])
- lstrip() 메서드
- 문자열의 시작(왼쪽)에서 지정된 문자열 제거
- str.lstriop([chars])
- rstrip() 메서드
- 문자열의 끝(오른쪽)에서 지정된 문자열 제거
- str.rstrip([chars])
text = " hello world "
print(text.strip())# "hello world" - 양쪽의 공백 제거
text = "---hello---"
print(text.strip("-"))# "hello" - 양쪽의 "-" 제거
text = "www.example.com"
print(text.lstrip("w."))# "example.com" - 왼쪽의 "w"와 "." 제거
text = "filename.txt"
print(text.rstrip(".txt"))# "filename" - 오른쪽의 ".txt" 제거
1.4.6 upper(), lower() 메소드
- upper() 메서드
- 문자열 내의 모든 소문자를 대문자로 변환
- str.upper()
text = "Python is fun"
print(text.upper()) # 출력: "PYTHON IS FUN"
- lower() 메서드
- 문자열 내의 모든 대문자를 소문자로 변환
- str.lower()
text = "Python IS FUN"
print(text.lower()) # 출력: "python is fun"
1.4.7 startswith()와 endswith() 메서드
- startwith() 메서드
- 주어진 문자열이 특정 문자나 문자열, 혹은 문자열 튜플로 시작하는지 여부를 확인
- 구문: str.startswith(prefix, start, end)
- prefix: 시작하는 문자 또는 문자열 혹은 문자열의 튜플을 지정합니다.
- start (선택 사항): 검사를 시작할 인덱스입니다. 이 매개변수를 생략하면 문자열의 시작부터 검사합니다.
- end (선택 사항): 검사를 끝낼 인덱스입니다. 이 매개변수를 생략하면 문자열의 끝까지 검사합니다.
text = "Python programming is fun."
print(text.startswith("Python")) # True
print(text.startswith("python")) # False, 대소문자 구별
print(text.startswith(("Python", "programming"), 7)) # True, 7번 인덱스에서 시작하는 부분 문자열 확인
- endswith() 메서드
- 주어진 문자열이 특정 문자나 문자열, 혹은 문자열의 튜플로 끝나는지 여부를 확인
- 구문: str.endswith(suffix, start, end)
- suffix: 끝나는 문자 또는 문자열 혹은 문자열의 튜플을 지정합니다.
- start와 end 매개변수는 startswith()의 그것과 동일하게 작동합니다.
filename = "example.txt"
print(filename.endswith(".txt")) # True
print(filename.endswith(".pdf")) # False
print(filename.endswith(("png", "txt", "doc"), 0, 5)) # False, 0부터 5번 인덱스까지의 부분 문자열 확인
1.4.8 isdigit(), isalpha(), isalnum() 메서드
- isdigit() 메서드
- 문자열의 모든 문자가 숫자(0-9)일 경우 True를 반환합니다. 그렇지 않으면 False를 반환합니다.
num = "12345"
print(num.isdigit()) # 출력: True
num = "123a45"
print(num.isdigit()) # 출력: False
- isalpha() 메서드
- 문자열의 모든 문자가 알파벳(대문자 A-Z, 소문자 a-z)일 경우 True를 반환합니다. 그렇지 않으면 False를 반환합니다.
text = "Python"
print(text.isalpha()) # 출력: True
text = "Python3"
print(text.isalpha()) # 출력: False
- isalnum() 메서드
- 문자열의 모든 문자가 알파벳 또는 숫자일 경우 True를 반환합니다. 그렇지 않으면 False를 반환합니다.
text = "Python3"
print(text.isalnum()) # 출력: True
text = "Python 3"
print(text.isalnum()) # 출력: False, 공백 포함
1.4.9 count( ) 메서드
특정 부분 문자열(substring)이 나타나는 횟수를 세는 데 사용
str.count(sub, start, end)
# sub: 세고자 하는 부분 문자열
# start: 검색을 시작할 위치의 인덱스
# end: 검색을 종료할 위치의 인덱스
text = 'Hello, World!'
count_l = text.count('l')
print(count_l) # 결과: 3
text = 'Hello, World!'
count_l = text.count('l', 0, 5) # 인덱스 0부터 5까지 'l'의 출현 횟수를 센다.
print(count_l) # 결과: 2
1.5 문자열 포멧팅
1.5.1 %를 사용한 문자열 포멧팅
문자열 내에서 변수의 값을 대입하기 위해 사용
문자열 포매팅에서 사용되는 대표적인 형식 지정자에는 %s (문자열), %d (정수), %f (부동소수점 숫자) 등이 있다.
문자열 포매팅을 할 때는 '%' 연산자 오른쪽에 변수를 위치시키고, 문자열 안에서 해당 변수의 위치를 지정다
name = "홍길동"
age = 30
print("이름: %s, 나이: %d" % (name, age)) # "이름: 홍길동, 나이: 30"을 출력합니다.
1.5.2 str.format() 메소드
문자열 내에 중괄호 {}를 사용하여 변수를 표시한 뒤, str.format() 메소드에 전달된 인자를 해당 위치에 삽입
"{} {}".format("안녕", "세상")
- 위치를 이용한 포멧팅
- 각 중괄호에 숫자를 할당하여 format 메소드에 전달된 인자의 위치를 지정할 수 있습니다.
"{1} {0}".format("세상", "안녕")
- 키워드를 이용한 포멧팅
- 각 중괄호 안에 변수명을 지정하고, format 메소드에 해당 변수명과 값을 키워드 인자로 전달
"이름: {name}, 나이: {age}".format(name="홍길동", age=30)
- 포맷 지정자 사용
- 중괄호 내에 콜론(:) 뒤에 포맷 지정자를 사용하여 숫자, 날짜, 시간 등의 형식을 지정
"정수: {0:d}, 소수: {1:.2f}".format(42, 7.123)
1.5.3 f-string (Formatted String Literal)
f-string을 사용하면 변수나 표현식의 값을 문자열 안에 직접 삽입할 수 있다.
코드의 가독성을 크게 향상시킬 수 있다.
f-string은 문자열 앞에 f나 F를 붙여서 사용하며, 중괄호 {} 안에 변수명이나 표현식을 넣어 값을 삽입할 수 있다.
- f-string 사용 예시
name = "홍길동"
age = 30
print(f"이름: {name}, 나이: {age}") # 출력: 이름: 홍길동, 나이: 30
- f-string 내에서 직접적인 연산이나 함수 호출도 가능
x = 10
print(f"x의 제곱은 {x**2}입니다") # 출력: x의 제곱은 100입니다
- 포맷 지정자 사용
import datetime
today = datetime.datetime.now()
print(f"오늘 날짜는 {today:%Y-%m-%d}입니다") # 출력: 오늘 날짜는 2024-04-21입니다
PI = 3.141592
print(f"파이 값은 {PI:.2f}입니다") # 출력: 파이 값은 3.14입니다
1.6 문자열 연산자
1.6.1 덧셈 연산자
두 문자열을 연결할 때 사용합니다.
greeting1 = "안녕"
greeting2 = "하세요."
message = greeting1 + greeting2 # 문자열을 연결합니다.
print(message) # "안녕하세요." 출력
1.6.2 곱셈 연산자
문자열을 주어진 횟수만큼 반복한다.
repeat_str = "hello! "
times = 3
result = repeat_str * times # 문자열을 3번 반복합니다.
print(result) # "hello! hello! hello! " 출력
참고 문헌
'Language > Python' 카테고리의 다른 글
[Python] 조건문 (0) | 2024.04.23 |
---|---|
[Python] 불리언 (2) | 2024.04.22 |
[Python] 숫자형 (0) | 2024.04.22 |
[Python] 입력과 출력 (0) | 2024.04.22 |
[Python] 연산자 (0) | 2024.04.21 |