본문 바로가기

Programming

4장 문자열

출처 : 열혈강의 파이썬

posted by _cham

   

지금까지 해보니 너무 속도가 더딘거 같아서 지금부터는 조금 더 속도를 높이기 위해 c언어나 다른 언어와 비슷한 부분은 넘기고 차이점 위주로 설명을 할 것이다. 아마 파이썬을 공부하는 분들은 c언어 정도는 알고 있으실 것이다.

   

@시퀀스 자료형

문자열은 시퀀스(Sequence)자료형이다. 여러 객체들을 저장하는 저장 자료형이며, 그 객체들은 순서를 가진다. 그래서 첨자(Index)를 이용하여 참조가 가능하다.

  1. 여러 개의 객체를 저장할 수 있다.
  2. 각 객체들은 순서를 갖는다.
  3. 각 객체들은 첨자를 이용하여 참조 가능하다.

       

문자열은 ' 혹은 " 로 묶인 문자들의 열이다. 리스트는 [ ], 튜플은 ( ) 안에 둘러싸인 객체들의 모임이다. 조금씩 다른 특징을 가지고 있지만, 모두 시퀀스 형 자료형이라는 공통적인 특성을

가지고 있다.

  1. 인덱싱(Indexing) - [k]

    k번 위치의 값 하나를 취한다

  2. 슬라이싱(Slicing) - [s:t]

    s부터 t사이 구간의 값을 취한다

  3. 연결하기(Concatenation) - +

    두 시퀀스 자료를 붙여서 새로운 자료를 만든다

  4. 반복하기(Repetition) - *

    시퀀스 자료를 여러 번 반복해서 새로운 자료를 만든다

  5. 멤버십 테스트(Membership Test) - in

    어떤 값이 시퀀스 자료에 속하는지를 검사한다

  6. 길이 정보(len)

    시퀀스 자료의 크기를 나타냄

       

@@슬라이싱

슬라이싱은 [시작옵셋:끝옵셋] 형식이다. 옵셋은 생략될 수 있고, 시작 옵셋이 생략되면 0, 끝 옵셋이 생략되면 마지막 값으로 처리된다. 2장에서 다루었으므로 기본적인 내용은 생략한다. 가볍게 예만 보겠다

   

@@확장 슬라이싱

세 번째 [start : stop : step] step을 가진 슬라이싱을 확장 슬라이싱 이라고 한다.

   

@@반복하기

*연산자를 이용하여 시퀀스 객체를 여러 번 반복해서 붙일 수 있다.

   

@@멤버십 테스트

어떤 객체가 시퀀스 객체에 포함된 것인지 검사하는 것을 '멤버십 테스트' 라고 한다. 리턴 값 1은 '참' 0은 '거짓'을 의미함

   

문자열인 경우, in 연산자로 부분 문자열을 확인할 수 있다.

   

@@길이 정보

내장함수 len을 이용하여 시퀀스 객체 안에 있는 전체 요소의 개수를 알아낼 수 있다.

   

@문자열 정의하기

   

@@한 줄 문자열

별거없다

전부 똑같다

   

@@여러 줄 문자열

이렇게 싱글쿼터나 더블쿼터가 3개를 넣으면 이렇게 여러 줄에 걸쳐서 문자열을 입력 할 수가 있다.

   

이스케이프 문자도 모두 다른 언어들과 같지만 한가지 눈여겨 볼게 있다면

\ Enter 를 치면 라인이 연속으로 된다.

이런식으로

   

자 이것말고는 볼게없다

다음으로 넘어가자

   

@문자열 포매팅(Formatting)

내가 생각하기에 이 부분은 아주 중요하다. 아주 파이썬적인 문법이다

이건 문자열을 좀 더 자유롭게 구성할 수 있는 방법이다. 여기서 포맷은 문서의 틀 혹은 양식을 말한다.

백문이 불여일견이라고 예제를 한번 보면서 이해하자

   

@@튜플을 이용한 포매팅

이런식으로 문서의 양식을 만들 수 있다.

%s는 내용이 채워질 부분이고, 나머지는 틀이 된다.

문서 양식도 볼 수 있다.

   

이렇게 튜플을 이용해서도 가능하다.

   

이런것도 가능하다

예제를 봅시다

   

#참고

만약 %문자를 출력해야 하는 경우에는 %%를 사용한다

예제를 보자

   

여러 자료형에 대한 출력값을 보자

예제를 보자

[포맷 문자열]

포맷 문자열

설명

%s

문자열 혹은 임의의 객체를 문자열로 변환한다. (str( ) 함수를 이용한다.)

%r

문자열 혹은 임의의 객체를 문자열로 변환한다. (repr( ) 함수를 이용한다.)

%c

길이 1의 문자열 '%c' % 'A'

%d

10진 정수

%i

정수 (%d 와의 차이가 없다.)

%u

부호 없는 정수 '%u' % -12 의 결과는 '4294967284' 양수는 그대로,

음수는 양수적 해석을 적용한다.

%o

8진수 '%o' % 12 의 결과는 '14'

%x

16진수 '%x' % 12 의 결과는 'c'

%X

16진수 대문자 '%X' % 12 의 결과는 'C'

%e

부동 소수점(실수)을 지수 형태로 표현, 유효 숫자는 7자리로 표현한다.

'%e' % 123.45678결과는 '1.2345678e+002'

%E

%e와 동일하다. 단, 지수 표현을 대문자 E로 한다.

%f

부동 소수점(실수)을 표현 '%f' % 123.45678 결과는 '123.456780'

%g

부동 소수점을 편의에 따라서 소수점 형식 혹은 지수 형식으로 변환한다.

6자리의 유효 숫자로 표현한다.

%G

%g와 같다. 단, 지수 표현을 대문자 E로 한다.

   

str( ) 는 print문에 의한 출력과 같다

repr( ) 는 변수만 입력해서 17자리의 유효 자리를 출력하는 것과 같다

   

[보조 포맷 문자열 지시자]

기호

설명

m

m개의 최소 자리를 확보한다.

>>> '%5s' % ('egg')

^^^^^egg

m, n

m개의 최소 자리를 확보하고,

n개의 소수점 이하 자리를 출력한다.

>>> '%5.2f' % 1.456789

1.46

-

왼쪽으로 맞추어서 출력한다

>>> '%-d, %-d' % (123, -123)

  

+

+ / - 부호 출력

>>> '%+d, %+d' % (123, -123)

공백

양수일 때 공백을 삽입한다

>>> '% d', % d' % (123, -123)

#

8진수 출력에는 0, 16진수 출력에는

0x 혹은 0X 를 앞에 붙인다

>>> '%#o %#x %#X' % (12,12,12)

0

좌측 빈 공간을 0으로 채운다

>>> '%05d' % 12

   

이제 예제들을 보면서 이해를 해보자

   

m, n

m은 최소 자리 확보

n은 소수점 이하 자리

   

-는 왼쪽정렬

+는 안쓰는것과 같이 오른쪽 정렬

   

+는

+ 일때 + 기호 표시해줌

   

공백은

+일때 공백을 하나 추가해줌(칸 맞추기 용인듯)

   

#을 넣으면 각 자료형을 표시해줌

   

   

@@사전을 이용한 포매팅

포맷 문자열이 사전의 키 이름으로 표현되면, 사전에 있는 값으로 그 부분이 대치된다

튜플과 똑같으므로 간단한 예제만 보고 넘어가자

   

#여기서! 파이썬에서는 모든 변수를 사전 형식으로 저장된다!

지역 영역에서 치환된 변수 사전을 얻으려면 vars( ) 또는 locals( ) 를 이용해보자

   

따라서, 포매팅을 사용할때 vars( ) 나 locals( ) 를 이용하면 표현된 포맷 문자열에 변수 이름으로 사용할 수도 있다.

   

@문자열 메쏘드

자 이제 문자열에 관련된 쓸만한 메쏘드들을 살펴보자

   

@@대소문자 변환에 관한 메쏘드

upper는 대문자로, lower()는 소문자로

swapcase는 대문자는 소문자로, 소문자는 대문자로

capitalize는 맨 앞글자만 대문자로

title은 각 단어의 첫글자를 대문자로

   

@@검색에 관련된 메쏘드

count는 총 개수 찾기

find는 어느 오프셋에 그 단어가 있는지 찾기

find에 뒤에 3을 넣으면 3번 오프셋부터 찾겠다는 뜻

find에서 일치하는 문자열이 없다면 -1을 반환

rfind는 뒤에서부터 찾겠다

startswith는 맨 처음에 시작하는 문자열이 일치하느냐

뒤에 숫자가 들어가면 7번 오프셋에서 이 문자열로 시작하느냐

endswith는 맨 뒤에 문자열로 끝나느냐

뒤에 숫자가 들어가면 만약 0, 26 이라면 0번~26번 오프셋에서 끝나는 문자열이 일치하느냐

   

@@편집 및 치환과 관련된 메쏘드

strip은 좌우의 공백을 없앤다

strip에 'l'이나 'r'을 붙으면 '좌' 와 '우' 의 공백을 없앤다

strip에 넣고 싶은 문자열들을 넣으면 그에 해당하는 문자열들을 없애준다.하지만 strip은 좌우의 맨 끝만 지워주기 때문에 a가 나오게 되면 그 앞쪽은 없어지지 않는다

   

replace로 문자열을 치환할 수 있다.

   

@@문자열 분리와 결합에 관련된 메쏘드

split은 기본적으로 공백으로 분리한다. 사용자가 원하는 것으로 지정할 수도 있다.

split도 lsplit이나 rsplit을 사용하여 왼쪽이나 오른쪽부터 처리하게 할 수 있다.

':'.join(t)를 보면 t에는 리스트가 들어있다. 그 리스트들의 문자열들을 ':' 로 결합한다는 뜻이다

'\n'.join(t)로 하면 개행으로 결합

splitlines는 라인 단위로 분리

#join을 살펴보자

':'join(t) 는 t는 리스트이고 ':'는 리스트의 문자열들을 연결한 문자열이다.

join의 사용법을 종종 혼돈하는 경우가 많으므로 주의하자

   

@@정렬에 관련된 메쏘드

center(40) 전체 40 문자의 가운데에 맞추겠다는 뜻

이건 이제 설명안해도….

center rjust ljust 모두 채워질 문자를 선택할 수 있다.

   

   

@string모듈

   

@@stirng모듈 상수

printable은 출력 가능한 문자들 모두

whitespace는 공백 문자 모두(8진수 표현)

   

간단한 예제로 어떻게 사용하는지 보자

id를 입력받는데 id가 영문자와 숫자로만 이루어진 id로써 적합한지에 대한 소스이다

   

   

   

   

@유니코드

유니코드는 다국어 문자를 표현하기 위한 코드체계이다.

유니코드를 표현하는 문자열은 u'String' 이다.

unicode()는 유니코드 문자열로 변환한다.

   

유니코드 문자열을 원하는 코딩으로 다시 변환하려면 econde([encoding]) 메쏘드를 사용한다.

encoding은 'euc-kr', 'utf-8', 'iso-8859-1'와 같은 문자열이다.

   

한글 문자열의 길이는 len함수로 잘 계산되지 않으나, unicode를 이용하면 쉽게 해결된다.

그리고 인덱싱도 가능

   

훌루루루…

   

   

'Programming' 카테고리의 다른 글

gcc 기본  (0) 2014.07.01
5장 리스트  (0) 2011.08.13
3장 수치 자료형과 연산자  (0) 2011.08.08
2장 파이썬 문과 기본 자료형  (0) 2011.08.06
1장 파이썬 시작하기  (2) 2011.08.06