"문자"
'문자’
"””문자”””
'’’문자’’’
문자 안에 ' 포함시키기
>>> food = 'Python's favorite food is perl'
File "<stdin>", line 1
food = 'Python's favorite food is perl'
^
SyntaxError: invalid syntax
food = "Python's favorite food is perl"
(백슬래시)를 이용해서 작은따옴표(')와 큰따옴표(")를 문자열에 포함시키기
>>> food = 'Python\'s favorite food is perl'
>>> say = "\"Python is very easy.\" he says."
작은따옴표(')나 큰따옴표(")를 문자열에 포함시키는 또 다른 방법은 \(백슬래시)를 이용하는 것이다. 즉, 백슬래시(\)를 작은따옴표(')나 큰따옴표(") 앞에 삽입하면 \(백슬래시) 뒤의 작은따옴표(')나 큰따옴표(")는 문자열을 둘러싸는 기호의 의미가 아니라 문자('),(")그 자체를 뜻하게 된다.
연속된 작은따옴표 3개(''') 또는 큰따옴표 3개(""") 이용
>>> multiline='''
... Life is too short
... You need python
... '''
>>> multiline="""
... Life is too short
... You need python
... """
이스케이프 코드
[이스케이프 코드란?]
문자열 예제에서 여러 줄의 문장을 처리할 때 백슬래시 문자와 소문자 n을 조합한 \n 이스케이프 코드를 사용했다. 이스케이프 코드란 프로그래밍할 때 사용할 수 있도록 미리 정의해 둔 "문자 조합"이다. 주로 출력물을 보기 좋게 정렬하는 용도로 이용된다. 몇 가지 이스케이프 코드를 정리하면 다음과 같다.
코드 설명
\n 개행 (줄바꿈)
\t 수평 탭
\\ 문자 "\"
\' 단일 인용부호(')
\" 이중 인용부호(")
\r 캐리지 리턴
\f 폼 피드
\a 벨 소리
\b 백 스페이스
\000 널문자
이중에서 활용빈도가 높은 것은 \n, \t, \\, \', \"이다. 나머지는 프로그램에서 잘 사용되지 않는다.
a = "python"
b = "snake"
print(a+b)
pythonsnake
a = "python"
a * 2
'pythonpython'
print("=" * 50)
print("My Program")
print("=" * 50)
==================================================
My Program
==================================================
Life is too short, You need Python
0 1 2 3
0123456789012345678901234567890123
2는 문자열 12
a[번호]는 문자열 내 특정한 값을 뽑아내는 역할을 한다. 이러한 것을 인덱싱이라고 한다.
>>> a = "Life is too short, You need Python"
>>> a[3]
'e'
a[-1] = n>>>역순 카운팅
a[-0] = L>>>-0= 0 이라서
슬라이싱
a[0:5] = Life
a[:17] = Life is too short
a[0:3] = Lif
a[n:] - 원하는 결과가 아니었음
슬라이싱 활용 예시
a = "20010331Rainy"
date = a[:8]
weather = a[8:]
print(date)
'20010331'
print(weather)
'Rainy'
a = "20010331Rainy"
year = a[:4]
day = a[4:8]
weather = a[8:]
print(year)
'2001'
print(day)
'0331'
print(weather)
'Rainy'
["Pithon"이라는 문자열을"Python"으로바꾸려면?]
"Pithon"이라는 문자열을 "Python"으로 바꾸려면 어떻게 해야 할까? 제일 먼저 떠오르는 생각은 다음과 같을 것이다.
>>> a = "Pithon"
>>> a[1]
'i'
>>> a[1] = 'y'
요컨대 a라는 변수에 "Pithon"이라는 문자열을 대입하고 a[1]의 값이 i니까 a[1]을 y로 바꾸어 준다는 생 각이다. 하지만 결과는 어떻게 나올까?
당연히 에러가 발생한다. 왜냐하면 문자열의 요소값은 바꿀 수 있는 값이 아니기 때문이다(문자열, 튜플 등 의 자료형은 그 요소값을 변경할 수 없다. 그래서 immutable한 자료형이라고도 부른다). 하지만 앞서 살펴본 슬라이싱 기법을 이용하면 "Pithon"이라는 문자열을 "Python"으로 바꿀 수 있는 방법이 있다.
다음의 예를 보자.
>>> a = "Pithon"
>>> a[:1]
'P'
>>> a[2:]
'thon'
>>> a[:1] + 'y' + a[2:]
'Python'
위의 예에서 볼 수 있듯이 슬라이싱을 이용하면 'Pithon'이라는 문자열을 'P' 부분과 'thon' 부분으로 나눌 수 있기 때문에 그 사이에 'y'라는 문자를 추가하여 'Python'이라는 새로운 문자열을 만들 수 있다.
코드 설명
%s 문자열 (String)
%c 문자 1개(character)
%d 정수 (Integer)
%f 부동소수 (floating-point)
%o 8진수
%x 16진수
%% Literal % (문자 % 자체) <<??
a = "Hello %s World"
print(a % "i'm the")
포맷 코드와 숫자 함께 사용하기
위에서 보았듯이 %d, %s 등의 포맷 코드는 문자열 내에 어떤 값을 삽입하기 위해서 사용된다. 하지만 포맷 코드를 숫자와 함께 사용하면 더 유용하게 사용할 수 있다. 다음의 예를 보고 따라 해보자.
1) 정렬과 공백
>>> "%10s" % "hi"
' hi'
앞의 예문에서 "%10s"의 의미는 전체 길이가 10개인 문자열 공간에서 hi를 오른쪽으로 정렬하고 그 앞의 나머지는 공백으로 남겨 두라는 의미이다.
그렇다면 반대쪽인 왼쪽 정렬은 "%-10s"가 될 것이다. 확인해 보자.
>>> "%-10sjane." % 'hi'
'hi jane.'
hi를 왼쪽으로 정렬하고 나머지는 공백으로 채웠음을 볼 수 있다.
2) 소수점 표현하기
>>> "%0.4f" % 3.42134234
'3.4213'
3.42134234를 소수점 네 번째 자리까지만 나타내고 싶은 경우에는 위와 같이 사용한다. 즉, 여기서 '.'의 의미는 소수점 포인트를 말하고 그 뒤의 숫자 4는 소수점 뒤에 나올 숫자의 개수를 말한다. 다음의 예를 살펴보자.
>>> "%10.4f" % 3.42134234
' 3.4213'
위의 예는 3.42134234라는 숫자를 소수점 네 번째 자리까지만 표시하고 전체 길이가 10개인 문자열 공간에서 오른쪽으로 정렬하는 예를 보여준다.
count 문자 개수 세기
a = "hobby"
print(a.count(‘b’))
2
find 위치 알려주기
a = "Python is best choice"
print(a.find('b'))
10
print(a.find('k'))
-1
index 위치 알려주기
a = "Life is too short"
print(a.index('t'))
8
print(a.index('k'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
>>>문자열 안에 존재하지 않는 문자를 찾으면 오류가 발생한다
join문자열 삽입
>>> a= ","
>>> a.join('abcd')
'a,b,c,d'
각각의 문자 사이에 변수값인‘,’를삽입한다.
upper 소문자 → 대문자
a = "Hi"
print(a.upper())
print(a.lower())
HI
hi
strip 공백 지우기
a = " Hi "
print(a.strip())
print(a.lstrip())
print(a.rstrip())
`Hi`
`Hi `
` Hi`
replace 문자열 바꾸기
>>> a = "Life is too short"
>>> a.replace("Life", "Your leg")
'Your leg is too short'
split 문자열 나누기
a = "life is too short"
print(a.split())
['Life', 'is', 'too', 'short']
b = "alblcld"
print(b.split('l'))
['a', 'b', 'c', 'd']
format 고급 문자열 포메팅
문자열의 format 함수를 이용하면 좀 더 발전된 스타일로 문자열 포맷을 지정할 수 있다. 앞에서 살펴본 문자열 포매팅 예제들을 format 함수를 이용해서 바꾸면 다음과 같다.
숫자 바로 대입하기
>>> "I eat {0} apples".format(3)
'I eat 3 apples'
"I eat {0} apples" 문자열 중 {0} 부분이 숫자 3으로 바뀌었다.
문자열 바로 대입하기
>>> "I eat {0} apples".format("five")
'I eat five apples'
문자열의 {0} 항목이 five라는 문자열로 바뀌었다.
숫자 값을 가진 변수로 대입하기
>>> number = 3
>>> "I eat {0} apples".format(number)
'I eat 3 apples'
문자열의 {0} 항목이 number 변수의 값인 3으로 바뀌었다.
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.'
2개 이상의 값을 넣을 경우 문자열의 {0}, {1}과 같은 인덱스 항목들이 format 함수의 입력값들로 순서에 맞게 바뀐다. 즉, 위 예에서 {0}은 format 함수의 첫 번째 입력값인 number로 바뀌고 {1}은 format 함수의 두 번째 입력값인 day로 바뀐다.
이름으로 넣기
>>> "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.'
위 예에서 볼 수 있듯이 {0}, {1}과 같은 인덱스 항목 대신 더 편리한 {name} 형태를 이용하는 방법도 있다. {name} 형태를 이용할 경우 format 함수의 입력값에는 반드시 name=value와 같은 형태의 입력값이 있어야만 한다. 위 예는 문자열의 {number}, {day}가 format 함수의 입력값인 number=10, day=3 값으로 각각 바뀌는 것을 보여 주고 있다.
인덱스와 이름을 혼용해서 넣기
>>> "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.'
위와 같이 인덱스 항목과 name=value 형태를 혼용하는 것도 가능하다.
왼쪽 정렬
>>> "{0:<10}".format("hi")
'hi '
:<10 표현식을 이용하면 치환되는 문자열을 왼쪽으로 정렬하고 문자열의 총 자릿수를 10으로 맞출 수 있다.
오른쪽 정렬
>>> "{0:>10}".format("hi")
' hi'
오른쪽 정렬은 :< 대신 :>을 이용하면 된다. 화살표 방향을 생각하면 어느 쪽으로 정렬이 되는지 금방 알 수 있을 것이다.
가운데 정렬
>>> "{0:^10}".format("hi")
' hi '
:^ 기호를 이용하면 가운데 정렬도 가능하다.
공백 채우기
>>> "{0:=^10}".format("hi")
'====hi===='
>>> "{0:!<10}".format("hi")
'hi!!!!!!!!'
정렬 시 공백 문자 대신에 지정한 문자 값으로 채워 넣는 것도 가능하다. 채워 넣을 문자 값은 정렬 문자인 <, >, ^ 바로 앞에 넣어야 한다. 위 예에서 첫 번째 예제는 가운데(^)로 정렬하고 빈 공간을 =문자로 채웠고, 두번째 예제는 왼쪽(<)으로 정렬하고 빈 공간을 !문자로 채웠다.
소수점 표현하기
>>> y = 3.42134234
>>> "{0:0.4f}".format(y)
'3.4213'
위 예는 format 함수를 이용해 소수점을 4자리까지만 표현하는 방법을 보여 준다. 이전에 살펴보았던 표현식 0.4f가 그대로 이용된 걸 알 수 있다.
>>> "{0:10.4f}".format(y)
' 3.4213'
위와 같이 자릿수를 10으로 맞출 수도 있다. 역시 58쪽에서 살펴보았던 "10.4f"의 표현식이 그대로 이용된걸 알 수 있다.
{ 또는 } 문자 표현하기
>>> "{{ and }}".format()
'{ and }'
format 함수를 이용해 문자열 포매팅을 할 경우 {나 }와 같은 중괄호(brace) 문자를 포매팅 문자가 아닌 문자 그대로 사용하고 싶은 경우에는 위 예의 {{와 }}처럼 2개를 연속해서 사용하면 된다.