문자, 단어 등으로 구성된 문자들의 집합
"Life is too short, You need Python"
"a"
"123"
따옴표로 둘러싸여 있으면 모두 문자열
파이썬에서 문자열을 만드는 방법 4가지
1. 큰따옴표("
)로 양쪽 둘러싸기
"Hello World"
2. 작은따옴표('
)로 양쪽 둘러싸기
'Python is fun'
3. 큰따옴표 3개를 연속("""
)으로 써서 양쪽 둘러싸기
"""Life is too short, You need python"""
4. 작은따옴표 3개를 연속('''
)으로 써서 양쪽 둘러싸기
'''Life is too short, You need python'''
문자열 안에 작은따옴표나 큰따옴표를 포함시키고 싶을 때
문자열을 만들어 주는 주인공은 작은따옴표(')와 큰따옴표(")
문자열 안에도 작은따옴표와 큰따옴표가 들어 있어야 할 경우
1. 문자열에 작은따옴표 ('
) 포함시키기
Python's favorite food is perl
문자열을 food 변수에 저장하고 싶다고 가정
문자열 중 Python's에 작은따옴표(')가 포함되어 있음
큰따옴표 안에 들어 있는 작은따옴표는 문자열을 나타내기 위한 기호로 인식되지 않음
>>> food = "Python's favorite food is perl"
프롬프트에 food를 입력해서 결과 확인
변수에 저장된 문자열이 그대로 출력되는 것을 볼 수 있음
>>> food
"Python's favorite food is perl"
큰따옴표(")가 아닌 작은따옴표(')로 문자열을 둘러싼 후 다시 실행
'Python'이 문자열로 인식되어 구문 오류(SyntaxError) 발생
>>> food = 'Python's favorite food is perl'
File "<stdin>", line 1
food = 'Python's favorite food is perl'
^
SyntaxError: invalid syntax
2. 문자열에 큰따옴표 ("
) 포함시키기
"Python is very easy." he says.
>>> say = '"Python is very easy." he says.'
3. 백슬래시(\
) 사용
>>> food = 'Python\'s favorite food is perl'
>>> say = "\"Python is very easy.\" he says."
\
)를 작은따옴표(')나 큰따옴표(") 앞에 삽입 여러 줄인 문자열을 변수에 대입하고 싶을 때
여러 줄의 문자열을 변수에 대입하려면 어떻게 처리해야 할까?
Life is too short
You need python
1. 줄을 바꾸기 위한 이스케이프 코드 \n
>>> multiline = "Life is too short\nYou need python"
2. 연속된 작은따옴표 3개('''
) 또는 큰따옴표 3개("""
)
>>> multiline='''
... Life is too short
... You need python
... '''
작은따옴표 3개를 사용한 경우
>>> multiline="""
... Life is too short
... You need python
... """
큰따옴표 3개를 사용한 경우
print(multiline)을 입력해서 출력 확인
>>> print(multiline)
Lifeis too short
You need python
문자열이 여러 줄인 경우 이스케이프 코드를 쓰는 것보다 따옴표를 연속해서 쓰는 게 훨씬 깔끔함
이스케이프(escape) 코드란?
\n
이스케이프 코드 사용코드 설명 | |
---|---|
\n | 문자열 안에서 줄을 바꿀 때 사용 |
\t | 문자열 사이에 탭 간격을 줄 때 사용 |
\ | 문자 \를 그대로 표현할 때 사용 |
\' | 작은따옴표(')를 그대로 표현할 때 사용 |
\" | 큰따옴표(")를 그대로 표현할 때 사용 |
\r | 캐리지 리턴(줄 바꿈 문자, 현재 커서를 가장 앞으로 이동) |
\f | 폼 피드(줄 바꿈 문자, 현재 커서를 다음 줄로 이동) |
\a | 벨 소리(출력할 때 PC 스피커에서 '삑' 소리가 난다) |
\b | 백 스페이스 |
\000 | 널 문자 |
\n
, \t
, \\
, \'
, \"
은 활용빈도 높음문자열 더해서 연결하기(Concatenation)
>>> head = "Python"
>>> tail = " is fun!"
>>> head + tail
'Python is fun!'
head + tail
즉 head와 tail 변수가 +에 의해 합쳐진 것
문자열 곱하기
>>> a = "python"
>>> a * 2
'pythonpython'
위 소스에서 *
의 의미
위 소스 코드에서 a * 2
문장
문자열 곱하기 응용
```python
# multistring.py
print("=" * 50)
print("My Program")
print("=" * 50)
```
C:\doit
디렉터리에 파일 이름 multistring.py로 저장 후 실행
[윈도우 + R
(실행) → cmd 입력 → Enter
]를 눌러 명령 프롬프트 창에 입력 후 결괏값
C:\Users>cd C:\doit
C:\doit>python multistring.py
==================================================
My Program
==================================================
문자열 길이 구하기
len 함수
>>> a = "Life is too short"
>>> len(a)
17
인덱싱(Indexing)
슬라이싱(Slicing)
문자열 인덱싱이란?
>>> a = "Life is too short, You need Python"
변수 a에 저장한 문자열의 각 문자마다 번호 매김
Life is too short, You need Python
0 1 2 3
0123456789012345678901234567890123
"Life is too short, You need Python" 문자열
실행
```python
>>> a = "Life is too short, You need Python"
>>> a[3]
'e'
```
- a[3]
- a라는 문자열의 네 번째 문자 e
"파이썬은 0부터 숫자를 센다."
파이썬 관점에서의 위 문자열
a[0]:'L', a[1]:'i', a[2]:'f', a[3]:'e', a[4]:' ', ...
a[번호]
(”인덱싱”)문자열 인덱싱 활용
인덱싱 예 1
>>> a = "Life is too short, You need Python"
>>> a[0]
'L'
>>> a[12]
's'
>>> a[-1]
'n'
뒤에서부터 첫 번째 문자를 표시할 때도 0부터 세어 "a[-0]이라고 해야 하지 않을까?
0과 -0은 똑같은 것이기 때문에 a[-0]은 a[0]과 똑같은 값을 보여 줌
>>> a[-0]
'L'
인덱싱 예 2
>>> a[-2]
'o'
>>> a[-5]
'y'
첫 번째 예 : 뒤에서부터 두 번째 문자를 가리키는 것
두 번째 예 : 뒤에서부터 다섯 번째 문자를 가리키는 것
문자열 슬라이싱이란?
>>> a = "Life is too short, You need Python"
>>> b = a[0] + a[1] + a[2] + a[3]
>>> b
'Life'
>>> a = "Life is too short, You need Python"
>>> a[0:4]
'Life'
>>> a[0:3]
'Lif'
0 <= a < 3
문자열을 슬라이싱하는 방법
>>> a[0:5]
'Life '
>>> a[0:2]
'Li'
>>> a[5:7]
'is'
>>> a[12:17]
'short'
시작 번호부터 그 문자열의 끝까지 뽑아냄
>>> a[19:]
'You need Python'
문자열의 처음부터 끝 번호까지 뽑아냄
>>> a[:17]
'Life is too short'
문자열의 처음부터 끝까지를 뽑아냄
>>> a[:]
'Life is too short, You need Python'
>>> a[19:-7]
'You need'
슬라이싱으로 문자열 나누기
>>> a = "20010331Rainy"
>>> date = a[:8]
>>> weather = a[8:]
>>> date
'20010331'
>>> weather
'Rainy'
```python
>>> a = "20010331Rainy"
>>> year = a[:4]
>>> day = a[4:8]
>>> weather = a[8:]
>>> year
'2001'
>>> day
'0331'
>>> weather
'Rainy'
```
```python
>>> a = "Pithon"
>>> a[1]
'i'
>>> a[1] = 'y'
```
문자열 자료형은 그 요솟값을 변경할 수 없으므로 오류 발생
슬라이싱 기법을 사용
>>> a = "Pithon"
>>> a[:1]
'P'
>>> a[2:]
'thon'
>>> a[:1] + 'y' + a[2:]
'Python'
문자열 포매팅(Formatting)
문자열 안의 특정한 값을 바꿔야 할 경우가 있을 때 이것을 가능하게 해주는 것
문자열 안에 어떤 값을 삽입하는 방법
문자열 포매팅 따라 하기
1. 숫자 바로 대입
>>> "I eat %d apples." % 3
'I eat 3 apples.'
2. 문자열 바로 대입
>>> "I eat %s apples." % "five"
'I eat five apples.'
숫자를 넣기 위해서는 %d, 문자열을 넣기 위해서는 %s를 써야 함
※ 문자열을 대입할 때는 앞에서 배운 것처럼 큰따옴표나 작은따옴표를 반드시 사용해야 함
3. 숫자 값을 나타내는 변수로 대입
>>> number = 3
>>> "I eat %d apples." % number
'I eat 3 apples.'
4. 2개 이상의 값 넣기
2개 이상의 값을 넣으려면 마지막 % 다음 괄호 안에 콤마(,)로 구분
>>> number = 10
>>> day = "three"
>>> "I ate %d apples. so I was sick for %s days." % (number, day)
'I ate 10 apples. so I was sick for three days.'
문자열 포맷 코드
코드 | 설명 |
---|---|
%s | 문자열(String) |
%c | 문자 1개(character) |
%d | 정수(Integer) |
%f | 부동소수(floating-point) |
%o | 8진수 |
%x | 16진수 |
%% | Literal % (문자 % 자체) |
%s 포맷 코드는 어떤 형태의 값이든 변환해 넣을 수 있음
>>> "I have %s apples" % 3
'I have 3 apples'
>>> "rate is %s" % 3.234
'rate is 3.234'
포매팅 연산자 %d와 %를 같이 쓸 때는 %%
>>> "Error is %d%." % 98
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: incomplete format
문자열 포맷 코드인 %d와 %가 같은 문자열 안에 존재하는 경우, %를 나타내려면 반드시 %%로 써야 하는 법칙이 있기 때문
문자열 안에 %d 같은 포매팅 연산자가 없으면 %는 홀로 쓰여도 상관 없음
>>> "Error is %d%%." % 98
'Error is 98%.'
포맷 코드와 숫자 함께 사용하기
1. 정렬과 공백
>>> "%10s" % "hi"
' hi'
%10s
반대쪽인 왼쪽 정렬은 %-10s
>>> "%-10sjane." % 'hi'
'hi jane.'
2. 소수점 표현하기
3.42134234를 소수점 네 번째 자리까지만 나타내고 싶은 경우
>>> "%0.4f" % 3.42134234
'3.4213'
>>> "%10.4f" % 3.42134234
' 3.4213'
3.42134234를 소수점 네 번째 자리까지만 표기, 전체 길이가 10개인 문자열 공간에서 오른쪽 정렬
format 함수를 사용한 포매팅
숫자 바로 대입
>>> "I eat {0} apples".format(3)
'I eat 3 apples'
문자열 바로 대입
>>> "I eat {0} apples".format("five")
'I eat five apples'
숫자 값을 가진 변수로 대입
>>> number = 3
>>> "I eat {0} apples".format(number)
'I eat 3 apples'
2개 이상의 값 넣기
>>> number = 10
>>> day = "three"
>>> "I ate {0} apples. so I was sick for {1} days.".format(number, day)
'I ate 10 apples. so I was sick for three days.'
이름으로 넣기
>>> "I ate {number} apples. so I was sick for {day} days.".format(number=10, day=3)
'I ate 10 apples. so I was sick for 3 days.'
인덱스와 이름을 혼용해서 넣기
>>> "I ate {0} apples. so I was sick for {day} days.".format(10, day=3)
'I ate 10 apples. so I was sick for 3 days.'
왼쪽 정렬
>>> "{0:<10}".format("hi")
'hi '
:<10
표현식오른쪽 정렬
>>> "{0:>10}".format("hi")
' hi'
:>
: 오른쪽 정렬 가운데 정렬
>>> "{0:^10}".format("hi")
' hi '
:^
: 가운데 정렬공백 채우기
>>> "{0:=^10}".format("hi")
'====hi===='
>>> "{0:!<10}".format("hi")
'hi!!!!!!!!'
<, >, ^
바로 앞에 넣어야 한다. ^
)로 정렬, 공백을 =
문자로 채움 <
)으로 정렬, 공백을 !
문자로 채움소수점 표현하기
format 함수를 사용해 소수점을 4자리까지만 표현
>>> y = 3.42134234
>>> "{0:0.4f}".format(y)
'3.4213'
자릿수를 10으로 맞춤
>>> "{0:10.4f}".format(y)
' 3.4213'
{
또는 }
문자 표현하기
>>> "{{ and }}".format()
'{ and }'
format 함수를 사용해 문자열 포매팅을 할 경우
{ }
와 같은 중괄호(brace) 문자포매팅 문자가 아닌 문자 그대로 사용하고 싶은 경우
{{ }}
처럼 2개를 연속해서 사용f 문자열 포매팅
문자열 앞에 f 접두사를 붙이면 f 문자열 포매팅 기능 사용 가능
>>> name = '홍길동'
>>> age = 30
>>> f'나의 이름은 {name}입니다. 나이는 {age}입니다.'
'나의 이름은 홍길동입니다. 나이는 30입니다.'
f 문자열 포매팅
※ 표현식 : 문자열 안에서 변수와 +, -와 같은 수식을 함께 사용하는 것
>>> age = 30
>>> f'나는 내년이면 {age+1}살이 된다.'
'나는 내년이면 31살이 된다.'
딕셔너리를 f 문자열 포매팅에서 사용
※ 딕셔너리 : Key와 Value라는 것을 한 쌍으로 갖는 자료형
>>> d = {'name':'홍길동', 'age':30}
>>> f'나의 이름은 {d["name"]}입니다. 나이는 {d["age"]}입니다.'
'나의 이름은 홍길동입니다. 나이는 30입니다.'
정렬
>>> f'{"hi":<10}' # 왼쪽 정렬
'hi '
>>> f'{"hi":>10}' # 오른쪽 정렬
' hi'
>>> f'{"hi":^10}' # 가운데 정렬
' hi '
공백 채우기
>>> f'{"hi":=^10}' # 가운데 정렬하고 '=' 문자로 공백 채우기
'====hi===='
>>> f'{"hi":!<10}' # 왼쪽 정렬하고 '!' 문자로 공백 채우기
'hi!!!!!!!!'
소수점
>>> y = 3.42134234
>>> f'{y:0.4f}' # 소수점 4자리까지만 표현
'3.4213'
>>> f'{y:10.4f}' # 소수점 4자리까지 표현하고 총 자리수를 10으로 맞춤
' 3.4213'
>>> f'{{ and }}'
'{ and }'
문자열 자료형
문자 개수 세기 (count)
>>> a = "hobby"
>>> a.count('b')
2
위치 알려주기 1 (find)
문자열 중 문자 b가 처음으로 나온 위치를 반환
만약 찾는 문자나 문자열이 존재하지 않는다면 -1을 반환
```python
>>> a = "Python is the best choice"
>>> a.find('b')
14
>>> a.find('k')
-1
```
※ 파이썬은 숫자를 0부터 세기 때문에 b의 위치는 15가 아닌 14
위치 알려주기 2 (index)
문자열 안에 존재하지 않는 문자를 찾으면 오류가 발생한다는 점
>>> a = "Life is too short"
>>> a.index('t')
8
>>> a.index('k')
Traceback (most recent call last):
File "<stdin>", line 1,in <module>
ValueError: substringnot found
문자열 삽입 (join)
각각의 문자 사이에 ','를 삽입
문자열뿐만 아니라 앞으로 배울 리스트나 튜플도 입력으로 사용
>>> ",".join('abcd')
'a,b,c,d'
>>> ",".join(['a', 'b', 'c', 'd'])
'a,b,c,d'
소문자를 대문자로 바꾸기(upper)
소문자를 대문자로 바꾸어 줌
만약 문자열이 이미 대문자라면 아무 변화도 일어나지 않음
>>> a = "hi"
>>> a.upper()
'HI'
대문자를 소문자로 바꾸기(lower)
대문자를 소문자로 바꿔 줌
>>> a = "HI"
>>> a.lower()
'hi'
왼쪽 공백 지우기(lstrip)
>>> a = " hi "
>>> a.lstrip()
'hi '
오른쪽 공백 지우기(rstrip)
>>> a= " hi "
>>> a.rstrip()
' hi'
양쪽 공백 지우기(strip)
>>> a = " hi "
>>> a.strip()
'hi'
문자열 바꾸기(replace)
>>> a = "Life is too short"
>>> a.replace("Life", "Your leg")
'Your leg is too short'
문자열 나누기(split)
>>> a = "Life is too short"
>>> a.split()
['Life', 'is', 'too', 'short']
>>> b = "a:b:c:d"
>>> b.split(':')
['a', 'b', 'c', 'd']
split 함수
a.split()
처럼 괄호 안에 아무 값도 넣어 주지 않으면 공백(스페이스, 탭, 엔터 등)을 기준으로 문자열을 나누어 줌
만약 b.split(':')
처럼 괄호 안에 특정 값이 있을 경우