문자열의 슬라이싱과 포멧팅을 이용하여 데이터를 변형하는 방법에 대한 내용이다. 

원래는 리스트의 슬라이싱도 같이 올리려고 했는데 글자 제한에 걸려서 다음에 올리도록 하겠다.



======================== 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

+ Recent posts