문자열의 슬라이싱과 포멧팅을 이용하여 데이터를 변형하는 방법에 대한 내용이다.
원래는 리스트의 슬라이싱도 같이 올리려고 했는데 글자 제한에 걸려서 다음에 올리도록 하겠다.
======================== Python========================
### 슬라이싱
# 기본
a = 'abc de'
a[1:3] # 슬라이싱. 인덱스 1~2번만 뽑는다. 결과는 'bc'
a[0:9] # 결과는 'abc de'. R에서는 인덱스 공간을 넘어가면 na가 출력된 것과는 다른 점.
a[1:] # 'bc de'. 끝까지하려면 뒷쪽을 비우면 된다.
a[:4] # 위와 마찬가지. 결과는 'abc '
a[:] # 'abc de' 다 출력한다.
# [:] # 이건 객체가 지정되지 않아서 오류. SyntaxError: invalid syntax
# 마이너스(-) 인덱스를 이용
s = 'abcdef'
s[0:5:2] # 'ace'. 앞에서 배운 range(a,b,c)와 같음. a는 시작점, b는 끝, c는 간격설정(스텝). 이걸 for처럼 쓸 수 있다.
# 문자열 객체[시작할 인덱스(포함) : 끝낼 인덱스(제외) : 스텝] 이렇게 기억하자.
s[-1:] # 'f'. -1 ~ -0 까지라고 생각하면 쉬움
s[-3:] # 'def'. -3 ~ -0
s[:-1] # 'abcde'. 0 ~ -1
s[::2] # 'ace'. 시작부터 끝까지 두 개씩 건너뛰어 센다.
s[::-2] # 'fdb'. 뒤에서부터 시작해서 두 개씩 건너뛰어 센다. 순서가 바뀌는 것에 주의.
s[::-1] # 'fedcba' 뒤에서부터 시작해서 하나하나 출력. 순서가 바뀌는 것에 주의.
# 슬라이싱
b = 'abcdefgh'
b = b[0] + '(^_^)' + b[2:] # 중간에 인덱스 1번(b)의 자리에 '(^_^)'을 넣었다.
b # 'a(^_^)cdefgh'. 슬라이싱을 통해서 문자열을 바꿀 수 있다. b 대신에 (^_^)을 넣었다.
b = 5 + b # Java와 다르게 int와 String이 +을 이용해서 붙지 않는다.
# TypeError: unsupported operand type(s) for +: 'int' and 'str'
### 문자열 포맷팅
# %s # 자바에서 사용하는 %s와 동일
a = '안녕하세요 %s 님!'
name = '너'
a%name # '안녕하세요 너 님!'.
# %r # repr함수와 동일한 효과.
a = '안녕하세요 %r 님!'
name = '너'
a%name # "안녕하세요 '너' 님!"
# %c 한 글자, 한 문자를 반환하며 문자열을 반환하면 오류가 발생한다.
a = '우리는 %c요일에 만나요.' #
day = '토'
a%day # '우리는 토요일에 만나요.'
days = '월화수목금토일'
a%days # 에러발생. TypeError: %c requires int or char
# %d # 10진수 정수를 반환. %i와 동일하다.
a = '정수 %d이다.'
num = 5
a%num # '정수 5이다.'
a_ = '정수 %i이다.'
a_%num # '정수 5이다.'
# %u # 부호가 있는 정수로 반환한다.
a = '부호 있는 정수%u이다'
num = -5.0
a%num # '부호 있는 정수-5이다'
# %o # 8진수 정수를 반환한다.
a = '정수10의 8진수 정수는 %o이다'
number = 10
a%number # '정수10의 8진수 정수는 12이다'
# %x %X. # 16진수 정수를 반환한다. 출력되는 형태가 대문자인지 소문자인지만 다르다.
a = '정수10의 16진수 정수는 %x이다'
number=10
a%number # '정수10의 16진수 정수는 a이다'. 소문자로 출력
a_ = '정수10의 16진수 정수는 %X이다'
a_%number # '정수10의 16진수 정수는 A이다'. 대문자로 출력
# %f # 부동 소수점 실수를 반환한다.
a = '정수10의 부동 소수점은 %f이다'
number=10
a%number # '정수10의 부동 소수점은 10.000000이다'
# %e %E. # 부동 소수점 실수를 지수 형태로 반환한다.
a = '부동 소수점 실수를 10.000000의 지수 형태는 %e이다'
number=10.000000
a%number # '부동 소수점 실수를 10.000000의 지수 형태는 1.000000e+01이다'
# %g %G # 부동 소수점 실수와 지수를 일반 정수로 반환한다.
a = '부동 소수점 실수 10.000000의 정수는 %g이다'
number = 10.000000
a%number # '부동 소수점 실수 10.000000의 정수는 10이다'. 대문자 소문자 상관없음.
a_ = '부동 소수점 실수 10.000000의 정수는 %G이다'
a_%number # '부동 소수점 실수 10.000000의 정수는 10이다'. 대문자 소문자 상관없음.
# %% # % 문자 자체를 반환한다.
a='성공은 %d%%의 노력이다.'
number=99
a%number # '성공은 99%의 노력이다.'
##### 문자열의 주요 내장 메서드
### 변환 기능
# upper. 문자열을 모두 대문자로 변환한다.
s='i LIKE python'
s.upper() # 'I LIKE PYTHON'
# lower. 문자열을 모두 소문자로 변환한다.
s='i LIKE python'
s.lower() # 'i like python'
# swapcase. 대문자는 소문자로, 소문자는 대문자로 변환한다.
s='i LIKE python'
s.swapcase() # 'I like PYTHON'
# capitalize. 첫 문자만 대문자로 만들고 나머지는 소문자로 바꾼다.
s='i LIKE python. i LIKE python.'
s.capitalize() # 'I like python. i like python.'. 문장을 '.'으로 구분해도 두 번째 문장의 첫 글자는 대문자로 바뀌지 않는다.
# title. 각 단어의 첫 문자를 대문자로 변환한다.
s='i like python'
s.title() # 'I Like Python'
### boolean으로 확인하는 메서드.
# startswith. 문자열이 시작이 어떤 문자 혹은 문자열인지 확인하여 boolean값으로 리턴해준다. 대소문자를 구별한다.
s='i like python'
s.startswith('i') # True
s.startswith('I') # False
s.startswith('i like') # True
s.startswith('i lite') # False
s.startswith('l', 2) # True. 위에 find와 동일. 뒤의 숫자는 문자열의 인덱스가 2번부터 startswith를 적용한다는 뜻이다.
# endswith. 문자열의 끝을 확인하고 boolean값을 리턴. 대소문자를 구별한다.
s='i like python'
s.endswith('n') # True
s.endswith('N') # False
s.endswith('python') # True
s.endswith('Python') # False
# isdigit. 문자열의 정보가 숫자인지 아닌지를 판단하여 boolean을 리턴한다.
s='1234'
s.isdigit() # True
s='12가나'
s.isdigit() # False
# islower. 문자열이 모두 소문자인지를 판단하여 boolean을 리턴한다.
s='abc'
s.islower() # True
s='Abc'
s.islower() # False
s = 'abc123'
s.islower() # True. 문자열만 확인
s = 'abc가나'
s.islower() # True. 영문자열만 확인
# isupper. 문자열이 모두 대문자인지를 판단하여 boolean을 리턴한다.
s = 'ABC'
s.isupper() # True
s = 'aBC'
s.isupper() # False
s = 'ABC123'
s.isupper() # True, islower와 같음. 문자열만 확인
s = 'ABC가나'
s.isupper() # True. 영문자열만 확인
# isspace. 문자열 전체가 공백 문자인지 확인
s = ' asdf'
s.isspace() # False
s=' \n\t\r'
s.isspace() # True. 이스케이프 문자는 공백으로 취급
# istitle. 문자열 내의 각 단어들의 첫 글자가 대문자인지를 boolean 값으로 리턴한다.
s='This This'
s.istitle( ) # True
s='this This'
s.istitle( ) # False
### 공백제거
# strip, rstrip, lstrip
s=' i li ke python '
s.strip() # 'i li ke python'. 좌우 공백을 없앤다. 문자열 내부의 공백은 없애지 않는다.
s.rstrip() # ' i li ke python'. 우측 공백만 없앤다.
s.lstrip() # 'i li ke python '. 좌측 공백만 없앤다.
# split
s='python2 and python3 \n java \t javascript'
s.split( ) # ['python2', 'and', 'python3', 'java', 'javascript']. 이스케이프 문자는 제외된다.
s.split(' ') # ['python2', 'and', 'python3', '\n', 'java', '\t', 'javascript']. 직접 지정하면 이스케이프 문자도 나온다.
s.split('and') # ['python2 ', ' python3 \n java \t javascript']. and를 기준으로 자른다.
### 문자열 반환
# count
a = '나는 배가 고프다. 그리고 나는 배가 엄청 고프다.'
a.count('나는') # '나는'이 몇 번 들어갔는지 확인. 2
a.count(' ') # 띄어쓰기 확인. 7
'나는 배가 고프다. 그리고 나는 배가 엄청 고프다.'.count('나') # '나'를 찾는다. 이런 것도 가능다하는 것을 알아두면 좋다.
# find. 인자값에 저장된 문자열의 첫 글자의 위치를 int로 알려준다. java의 indexOf와 같음.
a.find('고프다.') # Java의 indexOf랑 같은 메서드. 맨 처음으로
======================== Python========================
'프로그래밍 > Python, R 프로그래밍' 카테고리의 다른 글
[Python] Python 4일차 - 2 (0) | 2018.05.16 |
---|---|
[R] R 5일차 (0) | 2018.05.16 |
[Python] Python 3일차 (0) | 2018.05.14 |
[R] R 3일차 (0) | 2018.05.14 |
[Python] Python 2일차 (0) | 2018.05.11 |