티스토리 뷰

Python

Python, str 내장모듈

hwangyoungjae 2016. 4. 21. 21:04
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

>> 문자열 확인 및 검색 <<

-. find(keyword,[start,[end]])

문자열 keyword가 나타나는 첫번째 인덱스를 반환

start,end를 지정하면 슬라이싱한것과 같은 효과

keyword를 찾이 못하면 -1을 반환

>>> "Python is Power".find('P')

0

>>> "Python is Power".find('P',5,-1) #[5:-1]슬라이싱

10

>>> "Python is Power".find('Pa') #찾지못한경우

-1

 

-. rfind(keyword,[start,[end]])

문자열의 뒤에서부터 조사하여 keyword가 나타나는 첫번째 인덱스를 반환

start,end를 지정하면 슬라이싱한것과 같은 효과

keyword를 찾지 못하면 -1를 반환

>>> "Python is Power".rfind('P')

10

>>> "Python is Power".rfind('P',5,-1) #[5:-1]슬라이싱

10

>>> "Python is Power".find('Pa') #찾지못한경우

-1

 

-. index(keyword, [start,[end]])

find()메서드와 동일하게 동작하지만, keyword를 찾지 못한 경우 ValueError예외가 발생

>>> "Python is Power".index('Pa')

Traceback (most recent call last):

  File "<pyshell#162>", line 1, in <module>

    "Python is Power".index('Pa')

ValueError: substring not found

 

-. rindex(keyword,[start,[end]])

rfind()메서드와 동일하게 동작하지만 keyword를 찾지 못하는 경우 ValueError예외 발생

>>> "Python is Power".rindex('Pa')

Traceback (most recent call last):

  File "<pyshell#163>", line 1, in <module>

    "Python is Power".rindex('Pa')

ValueError: substring not found

 

-. startswith(prefix,[start,[end]])

prefix로 문자열이 시작되면 True

그렇치 않으면 False

start end를 지정하면 슬라이싱한것과 같은 효과

>>> 'python is power'.startswith('py')

True

>>> 'python is power'.startswith('py',5,10) #[5:10]슬라이싱

False

prefix에 튜플 사용가능

>>> 'python is power'.startswith(('p','r'))

True

 

-. endswith(postfix,[start,[end]])

postfix로 문자열이 끝나면 True

그렇지 않으면 False

start end를 지정하면 슬라이싱한것과같은 효과

>>> 'python is power'.endswith('wer')

True

>>> 'python is power'.endswith('wer',5,10) #[5:10]슬라이싱

False

postfix에 튜플 사용가능

>>> 'python is power'.endswith(('p','r'))

True

 

-. count(keyword,[start,[end]])

문자열에 keyword가 몇번이나 포함되어 있는지 출력

start,end를 주게 되면 슬라이싱과 같은 효과 즉, count의 검색범위

>>> "python is powerful".count('p')

2

>>> "python is powerful".count('p',5)

# [5:]로 슬라이싱하고 count한 결과와 동일

>>> "python is powerful".count('p',0,-1)

# [0:-1]로 슬라이싱하고 count한 결과와 동일

 

 

>> 문자열 치환 <<

-. replace(old,new,[count])

old new로 치환한 결과를 반환

count를 입력인자로 준 경우에는 count만큼의 횟수만 치환

>>> "python is powerful".replace('p','P')

'Python is Powerful'

>>> "python is powerful".replace('p','P',1)

'Python is powerful'

 

-. maketrans(x,[y,[z]])

이 함수는 translate()함수에 쓰일 번역용 맵을 반환함

입력인자가 하나인 경우에 사전을 입력으로 주어야 하며,

두개인 경우에는 길이가 같은 문자열을 입력으로 받아야 하고

입력인자가 셋인경우에는 길이가 같은 문자열 둘과 마지막 인자로 None으로 대체될 문자열을 입력받는다.

단순히 maketrans()함수만 사용한 경우는 아래와 같다.

>>> str.maketrans('p','P')

{112: 80}

아래처럼 translate()함수와 함께 사용되어야 한다.

>>> transmap = str.maketrans({'p':'P'}) #입력인자가 하나인경우

>>> "python is power".translate(transmap)

'Python is Power'

>>> transmap = str.maketrans('poieu','PO129') #입력인자가 둘인경우

>>> "python is power".translate(transmap)

'PythOn 1s POw2r'

>>> transmap = str.maketrans('p','P','!') #입력인자가 셋인경우

>>> "python is power!!!".translate(transmap)

'Python is Power'

 

 

>> 문자열 나누기와 합치기 <<

-. split([separator,[maxsplit]])

문자열을 separator로 분리

join()과 반대되는 기능을 수행함

separator이 생략된 경우 공백문자(Space,Tab,Enter)로 분리함

maxsplit이 주어진경우 maxsplit만큼만 분리함

>>> 'python is power'.split()

['python', 'is', 'power']

>>> 'python is power'.split(' ',1)

['python', 'is power']

 

-. rsplit([separator,[maxsplit]])

문자열을 separator로 분리

join()과 반대되는 기능을 수행함

separator이 생략된 경우 공백문자(Space,Tab,Enter)로 분리함

maxsplit이 주어진경우 뒤에서부터 maxsplit만큼만 분리함

>>> 'python is powerful'.rsplit()

['python', 'is', 'powerful']

>>> 'python is powerful'.rsplit(' ',1)

['python is', 'powerful']

 

-. splitlines([keep])

여러 라인으로 되어있는 문자열을 분리

keep True로 설정되면 구분자를 분리된 문자열에서 제거하지 않으며 디폴트인 False로 지정되면 제거함

>>> 'python\r\nis\npowerful'.splitlines()

['python', 'is', 'powerful']

>>> 'python\r\nis\npowerful'.splitlines(True)

['python\r\n', 'is\n', 'powerful']

 

-. partition(separator)

문자열을 separator로 나눔.

결과로는 앞부분,separator,뒷부분의 세 튜플로 반환됨

>>> "Python is power".partition('is')

('Python ', 'is', ' power')

 

-. rpartition(separator)

문자열을 뒤에서부터 검사하여 separator로 나눔

결과로는 앞부분,separator,뒷부분의 세 튜플로 반환됨

>>> 'python is powerful'.rpartition('p')

('python is ', 'p', 'owerful')

 

-. join(sequence)

iterate가능한 입력인 sequence형 변수를 지정된 문자열로 연결하여 반환

>>> '.'.join("HOT")

'H.O.T'

>>> ",".join(['python','is','powerful'])

'python,is,powerful'

 

 

>> 문자열 제거 <<

-. strip([chars])

문자열의 양쪽을 잘라냄

chars가 입력되지 않으면 공백문자(Space,Tab,Enter)를 제거하며

chars가 지정된 경우 chars의 모든 조합을 제거

>>> '\tPython\n'.strip()

'Python'

>>> '!@<<Python>>@!'.strip('<>!@')

'Python'

 

-. lstrip([chars])

문자열의 왼쪽을 잘라냄

chars가 지정되지 않으면 공백문자(space,tab,enter)를 제거하며

지정된경우 chars의 모든 조합을 제거

>>> '\tPython\n '.lstrip()

'Python\n '

>>> '!@<<Python>>@!'.lstrip('<>!@')

'Python>>@!'

 

-. rstrip([chars])

문자열의 오른쪽을 잘라냄

chars가 지정되지 않으면 공백문자(space,tab,enter)를 제거하며

지정된경우 chars의 모든 조합을 제거

>>> '\tPython\n '.rstrip()

'\tPython'

>>> '!@<<Python>>@!'.rstrip('<>!@')

'!@<<Python'

 

 

>> 알파벳과 숫자관련 <<

-. upper()

모든 알파벳을 대문자로 반환

>>> 'python is powerful'.upper()

'PYTHON IS POWERFUL'

 

-. isupper()

모든 알파벳이 대문자인경우 True

소문자가 있으면 False

>>> 'PYTHON'.isupper()

True

>>> 'Python'.isupper()

False

 

-. lower()

모든 알파벳을 소문자로 반환

>>> 'PYTHON IS POWERFUL'.lower()

'python is powerful'

 

-. islower()

모든 알파벳이 소문자이면 True

대문자가 있으면 False

>>> 'python'.islower()

True

>>> 'Python'.islower()

False

 

-. title()

문자열을 title스타일로 반환

title스타일은 문자열중 모든단어마다 첫번째가 대문자,그뒤로 소문자

>>> 'python is power'.title()

'Python Is Power'

 

-. istitle()

문자열이 title스타일인경우 True

그렇지 않으면 False

>>> "Python Is Powerful".istitle()

True

>>> "pyton is powerful".istitle()

False

 

-. capitalize()

모든 알파벳중 첫문자를 대문자로 나머지를 소문자로 반환

>>> 'python is power'.capitalize()

'Python is power'

>>> 'PYTHON IS POWER'.capitalize()

'Python is power'

 

-.swapcase()

대문자는 소문자로소문자는 대문자로 치환하여 반환

>>> 'Python Is Power'.swapcase()

'pYTHON iS pOWER'

 

-. isalpha()

알파벳으로만 이루어져 있으면 True

다른문자가 포함되어 있으면 False

>>> "Python".isalpha()

True

>>> "Python3".isalpha() #숫자포함

False

>>> "Python ".isalpha() #공백포함

False

 

-. isalnum()

알파벳과 숫자로 이루어져 있으면 True,

다른 문자가 포함되어 있으면 False

>>> "Python".isalnum()

True

>>> "Python30".isalnum()

True

>>> "Python3.0".isalnum() #다른문자 포함

False

>>> "Python 3".isalnum() #공백포함

False

 

-. isnumeric()

숫자로 이루어지면 True, 다른문자가 있으면 False

>>> '2580'.isnumeric()

True

>>> '2580 '.isnumeric() #여백포함

False

>>> '\u00bc','\u00bc'.isnumeric()

('¼', True)

 

-. isdecimal(), isdigit()

10진수로 이루어져있으면 True

다른문자가 있으면 False

ARABIC-INDIC DIGIT(U+0660~0669) True로 간주

>>> '2580'.isdecimal()

True

>>> '\u0669','\u0669'.isdecimal()

('٩', True)

>>> '\u00bc','\u00bc'.isdecimal()

('¼', False)

 

 

>> 공백문자(Space,Tab,Enter)관련 <<

-. zfill(width)

문자열의 길이를 width만큼으로 하고

빈공간을 '0'으로 채우기

>>> 'aaa'.zfill(5)

'00aaa'

 

-. expandtabs([tabsize])

tab을 공백으로 치환함

디폴트 tabsize 8

>>> "Python\tis\tPowerful".expandtabs()

'Python  is      Powerful'

>>> "Python\tis\tPowerful".expandtabs(1)

'Python is Powerful'

 

-. isspace()

모두 공백문자(Space,Tab,Enter)로 이루어져 있으면 True

다른문자가 있으면 False

>>> " ".isspace()

True

>>> "\t\n".isspace()

True

>>> "py\t\n".isspace()

False

 

 

>> 정렬 <<

-. center(width[,fillchar])

width만큼의 공간을 잡고 가운데정렬

fillchar가 지정된 경우 빈공간을 fillchar로 채움

가운데정렬

>>> 'aaa'.center(5)

' aaa '

>>> 'aaa'.center(5,'-')

'-aaa-'

 

-. ljust(width[,fillchar])

width만큼의 공간을 잡고 왼쪽정렬

fillchar가 지정된 경우 빈공간을 fillchar로 채움

>>> 'aaa'.ljust(5)

'aaa  '

>>> 'aaa'.ljust(5,'-')

'aaa--'

 

-. rjust(width[,fillchar])

width만큼의 공간을 잡고 오른쪽정렬

fillchar가 지정된 경우 빈공간을 fillchar로 채움

>>> 'aaa'.rjust(5)

'  aaa'

>>> 'aaa'.rjust(5,'-')

'--aaa'

 

 

>> 그외 <<

-. format

format인자들을 index로 사용

#index사용

>>> print('{0} is {1}'.format('apple','red'))

apple is red

 

#ket value사용

>>> print('{item} is {color}'.format(item='apple',color='red'))

apple is red

 

#dict사용

>>> print('{0[item]} is {0[color]}'.format(dic))

apple is red

 

#지역변수들을 사전형태로 반환하는 locals()사용

>>> print("{0[item]} is {0[color]}".format(locals()))

apple is red

 

#**를 이용하여 사전을 입력하였다고 하여 인자를 하나만 받게하기

>>> print('{item} is {color}'.format(**locals()))

apple is red

>>> print('{item} is {color}'.format(**dic))

apple is red

 

#!(느낌표)를 이용하여 문자열변환을 사용

>>> print('{item!s} is {color!s}'.format(**dic))

apple is red # !s = str()

>>> print('{item!r} is {color!r}'.format(**dic))

'apple' is 'red' # !r = repr()

>>> print('{item!a} is {color!a}'.format(**dic))

'apple' is 'red' # !a = ascii()

 

#변수의 인덱스사용하기

>>> print("{numbers}".format(**vars()))

[5, 4, 3, 2, 1]

>>> print("{numbers[0]}".format(**vars()))

5

 

#멤버변수사용하기

>>> class foo:

             var = 3.14

>>> f = foo()

>>> print("{f.var}".format(**vars()))

3.14

 

":"기호를 이용하여 보다 정교하게 정렬,,부호,공백처리,소수점,타입등을 지정하기

기호

설명

오른쪽 정렬

왼쪽 정렬

^

가운데 정렬

=

부호 표시

 

>>> print("{0:$>5}".format(10))

$$$10

>>> print("{0:$=+5}".format(10))

+$$10

>>> print("{0:$>+5}".format(10))

$$+10

부호를 나타내는 기호는 "+", "-", ""이 있음.

"+"는 플로스부호를 나타내라는 뜻이며

"-"는 마이너스 값만 마이너스부호를 나타내라는 것을 의미하고

""는 마이너스 값에는 마이너스 부호를 나타내고 플러스일때는 공백을 표시하라는 뜻이다.

>>> print("{0:$>+5}".format(10))

$$+10

>>> print("{0:$>+5}".format(-10))

$$-10

>>> print("{0:$>-5}".format(10))

$$$10

>>> print("{0:$>-5}".format(-10))

$$-10

>>> print("{0:$> 5}".format(10))

$$ 10

>>> print("{0:$> 5}".format(-10))

$$-10

또한 진수를 바꿔서 출력할수도 있음

'b'는 이진수, 'o' 8진수, 'd'는 십진수, 'x'는 16진수를 나타내며 'c'는 문자열을 출력한다.

>>> print('{0:b}'.format(10))

1010

>>> print('{0:o}'.format(10))

12

>>> print('{0:x}'.format(10))

a

>>> print('{0:c}'.format(65))

대문자 'A'의 아스키코드=65

#을 사용하면 #x 16진수, #o 8진수, #b 2진수로 표시됨

>>> print("{0:#x}".format(10))

0xa

>>> print("{0:#o}".format(10))

0o12

>>> print("{0:#b}".format(10))

0b1010

정수 이외에 실수에 대한 변환도 제공됨

'e'는 지수, 'f'는 일반적인 실수, '%'는 퍼센트 표현을 의미함

>>> print('{0:e}'.format(4/3))

1.333333e+00

>>> print('{0:f}'.format(4/3))

1.333333

>>> print('{0:%}'.format(4/3))

133.333333%

소수점 몇 번째자리까지 표현할 것인지를 지정

>>> print('{0:.3f}'.format(4/3))

1.333

 

-. isidentifier()

일반적으로 아스키환경에서 'a-z', 'A-Z' 혹은 '_'로 시작하고 'a-z', A-Z', 숫자 혹은 '_'로 구성되어 있으면 식별자로 사용할수 있다.

즉 이 메서드는 식별자의 경우 True, 그렇치 않으면 False를 반환한다.

아스키뿐만 아니라 다국어환경에 대한 결과도 반영됨

>>> 'id_1'.isidentifier()

True

>>> '1_id'.isidentifier()

False

>>> chr(0xc0),chr(0xc0).isidentifier()

('À', True)

 

-. encode([encoding,[errors]])

python3에서는 str클래스는 기본적으로 모두 유니코드이다. encode()를 거치면 인코딩이 있는 바이너리로 변환됨

>>> "가나다".encode('cp949') # window에서 사용하는 cp949

b'\xb0\xa1\xb3\xaa\xb4\xd9'

>>> "가나다".encode('utf-8') # 'UTF-8로 변환'

b'\xea\xb0\x80\xeb\x82\x98\xeb\x8b\xa4'

두번째 인자는 UnionEncodeError에 대한 처리방침을 나타냄

디폴트인 strict로 지정되어 있으면 다음과 같이 올바르지 않은 인코딩 적용시 UnicodeEncodeError예외가 발생함

>>> "가나다".encode('latin1','strict')

Traceback (most recent call last):

  File "<pyshell#121>", line 1, in <module>

    "가나다".encode('latin1','strict')

UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-2: ordinal not in range(256)

그 외에 'ignore'로 지정하면 에러가 난 부분을 무시하며

'replace' ?등 적절한 replace문자로 대체하고

'xmlcharrefreplace' XML표현방식으로,

'backslashreplace'역슬래시 표현방식으로 대체함

>>> '가나다abc'.encode('latin1','ignore')

b'abc'

>>> '가나다abc'.encode('latin1','replace')

b'???abc'

>>> '가나다abc'.encode('latin1','xmlcharrefreplace')

b'&#44032;&#45208;&#45796;abc'

>>> '가나다abc'.encode('latin1','backslashreplace')

b'\\uac00\\ub098\\ub2e4abc'

 

-. isprintable()

프린트가 가능하면 True, 그렇지 않은 문자가 속한경우 False

다음과 같이 유니코드상에서 Other로 구분되어 있는 문자들은 False를 반환함

>>> "test".isprintable()

True

>>> '\u0014','\u0014'.isprintable()

('\x14', False)

 

 

참조 : 빠르게 활용하는 파이썬프로그래밍

'Python' 카테고리의 다른 글

Python,module glob  (0) 2016.04.29
Python,module os.path [파일의 경로명]  (0) 2016.04.21
Python, 변수명  (0) 2016.04.21
Python, 소스코드 인코딩  (0) 2016.04.21
Python, if __name__=="__main__":  (0) 2016.04.21
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함