#!/usr/bin/env python # coding: utf-8 # *** # *** # # 8. 문자열 메소드와 포멧팅 # *** # *** # *** # ## 1 문자열 메소드(Methods) # *** # In[1]: s = 'i like programming.' print(s.upper()) print(s.upper().lower()) print('I Like Programming'.swapcase()) # 대문자는 소문자로, 소문자는 대문자로 변환 print(s.capitalize()) # 첫 문자를 대문자로 변환 print(s.title()) # 각 단어의 첫 문자를 대문자로 변환 # In[2]: s = 'i like programming, i like swimming.' print(s.count('like')) # 'like' 문자열이 출현한 횟수를 반환 print() print(s.find('like')) # 'like'의 첫글자의 인덱스인 위치(offset)를 반환 print(s.find('programming')) # 'programming'의 첫글자 위치를 반환 print(s.find('programmin')) # 'programmin'의 첫글자 위치를 반환 print(s.find('programmii')) # 'programmii' 단어는 없기 때문에 -1 반환 print() print(s.find('like', 3)) # offset=3 부터 'like'을 검색하여 'like'의 첫글자 위치 반환 print(s.find('my')) # 'my' 단어는 없기 때문에 -1 반환 # In[3]: s = 'i like programming, i like swimming.' print(s.startswith('i like')) # 'i like'로 시작하는 문자열인지 판단 print(s.startswith('I like')) # 대소문자 구별 print() print(s.endswith('swimming.')) # 'swimming.'로 끝나는 문자열인지 판단 print(s.startswith('progr', 7)) # 7번째 문자열이 'progr'로 시작하는지 판단 print() # In[4]: u = ' spam and ham ' print(len(u)) print(u.strip()) # 좌우 공백을 제거하여 새로운 스트링 생성 print(u) # 스트링은 변경불가능 y = u.strip() # 즉, strip()는 새로운 스트링을 생성함 print(y) print(len(y)) print() print(u.rstrip()) # 오른쪽 공백 제거 print(u.lstrip()) # 왼쪽 공백 제거 print() print(' abc '.strip()) print('><><><>'.strip('<>')) # 인자로 주어진 스트링 안에 지정된 모든 문자를 좌우에서 제거 # In[5]: p = ' \t abc \t ' print(p) print(p.strip()) # \t도 공백문자이므로 제거됨 # In[6]: u = 'spam and ham' print(u.replace('spam', 'spam, egg')) # replace()는 새로운 스트링을 생성함 print(u) # In[7]: u = ' spam and ham ' print(u.split()) # 공백으로 분리 (모든 공백 제거 및 문자열 내의 단어 리스트를 얻을 수 있음) print(u.split('and')) # 'and'로 분리 print() u2 = 'spam and ham\tegg\ncheese' print(u2.split()) # In[8]: u = 'spam ham\tegg\ncheese' t = u.split() # 문자열 내의 단어 리스트 print(t) print() t2 = ':'.join(t) # 리스트 t 내부의 각 원소들을 ':'로 연결한 문자열 반환 print(type(t2)) # print(t2) print() t3 = ",".join(t) # 리스트 t 내부의 각 원소들을 ','으로 연결한 문자열 반환 print(t3) print() t4 = '\n'.join(t) # 리스트 t 내부의 각 원소들을 '\n'으로 연결한 문자열 반환 print(t4) print() # In[9]: #u2 = u"스팸 햄 계란 치즈" u2 = "스팸 햄 계란 치즈" # python 3 부터는 u 리터럴 표기 불필요 t2 = u2.split() print(t2) print(t2[0], t2[1], t2[2], t2[3]) # In[10]: lines = '''first line second line third line''' print(type(lines)) lines2 = lines.splitlines() # 문자열을 라인 단위로 분리한 각 원소들을 지닌 리스트 반환 print(type(lines2)) print(lines2) # # # ['first line', 'second line', 'third line'] # In[11]: u = 'spam and egg' c = u.center(60) # 60자리를 확보하되 기존 문자열을 가운데 정렬한 새로운 문자열 반환 print(type(c)) # print(c) print(u.ljust(60)) # 60자리를 확보하되 기존 문자열을 왼쪽 정렬한 새로운 문자열 반환 print(u.rjust(60)) # 60자리를 확보하되 기존 문자열을 오른쪽 정렬한 새로운 문자열 반환 # In[12]: u = 'spam and egg' print(u.center(60, '-')) # 공백에 채워질 문자를 선택할 수 있음 print(u.ljust(60, '-')) print(u.rjust(60, '-')) # In[13]: print('1234'.isdigit()) # 문자열 내의 Character들이 모두 숫자인가? print('abcd'.isalpha()) # 문자열 내의 Character들이 모두 영문자인가? print('1abc234'.isalnum()) # 문자열 내의 Character들이 모두 영문자 또는 숫자인가? print('abc'.islower()) # 문자열 내의 Character들이 모두 소문자인가? print('ABC'.isupper()) # 문자열 내의 Character들이 모두 대문자인가? print('\t\r\n'.isspace()) # 문자열 내의 Character들이 모두 공백 문자인가? print('This Is A Title'.istitle()) # 문자열이 Title 형식 (각 단어의 첫글자가 대문자)인가? # In[14]: s = '123' print(s.zfill(5)) # 5글자 자리 확보뒤 문자열을 쓰되 남는 공백에는 zero (0)를 채움 print('goofy'.zfill(6)) # 6글자 자리 확보뒤 ... # *** # ## 2 문자열 포매팅 # *** # ### 2-1 튜플을 이용한 포매팅 # #### 1) 문자열 변환 # - 포맷팅 문자 # - 문자열 내에 존재하는 % # - 포캣팅을 활용한 문자열 변환 # - 포맷팅 문자를 포함하는 문자열 % 튜플 # In[15]: print('name = %s, age = %s' % ('gslee', '24')) # In[16]: letter = ''' 안녕하세요 %s님, 오늘 밤 파티에 참석해 주실 수 있나요? 그럼.. 이강성 드림''' name = '홍길동' print(letter % name) print() names = ['한학신', '정인숙', '박미경'] for name in names: print(letter % name) print('-' * 40) print() # #### 2) 포맷팅 문자 # |중요| 포맷팅 문자 | 설명 | # |--|-------------|------------------------------------------------------------------------------| # |O | %s | 문자열을 포함한 임의의 객체를 문자열로 변환하여 출력 (str() 내장 함수 사용) | # | | %r | 문자열을 포함한 임의의 객체를 문자열로 변환하여 출력 (repr() 내장 함수 사용) | # | | %c | 1글자 문자 (ex. '%c' % 'k) | # |O | %d | 10진 정수 (%5d: 5자리를 확보한 후 정수 포맷팅) | # | | %i | %d와 동일 | # | | %u | 부호 없는 정수. 음수는 양수처럼 해석함 (ex. '%u' % -12 --> '4294967284') | # | | %o | 8진수 정수 (ex. '%o' % 13 --> 15) | # | | %x | 16진수 정수 (소문자 표현) (ex. '%x' % 13 --> 'd') | # | | %X | 16진수 정수 (대문자 표현) (ex. '%X' % 13 --> 'D') | # | | %e | 부동 소수점 실수를 지수 형태로 표현 (%.2e: 2자리는 소수점 이하 자리수) | # | | %E | %e 와 동일 (대문자 E 표현) | # |O | %f | 부동 소수점 실수 (%5.2f: 소수점 포함 총 5자리 확보한 후 2자리는 소수점 이하 자리수) | # | | %g | 부동 소수점을 편의에 따라 일반 실수 형식이나 지수 형식으로 변환 | # | | %G | %g와 동일 (대문자 E 표현) | # In[17]: print("%s -- %s -- %d -- %f -- %e" % ((1, 2), [3,4,5], 5, 5.3, 101.3)) # In[18]: print("%3d -- %5.2f -- %.2e" % (5, 5.356, 101.3)) # In[19]: a = 456 print('%d -- %o -- %x -- %X' % (a, a, a, a)) # ### 2-2 사전(Dictionary)을 이용한 포매팅 # In[20]: print('%(이름)s -- %(전화번호)s' %{'이름':'홍길동', '전화번호':5284}) print('%(이름)s -- %(전화번호)s' %{'전화번호':5284, '이름':'홍길동'}) print('%(이름)s -- %(전화번호)s' %{'전화번호':5284, '이름':'홍길동', '주소':'Seoul'}) # ### 2-3 새로운 포매팅 방법 (Python 3 기준) - 오프라인 강의 - 공부 필수 # - https://pyformat.info/ # - https://dojang.io/mod/page/view.php?id=997 # In[21]: print('Hello, {0}'.format('world!')) print('Hello, {0}'.format(100)) # In[22]: print('Hello, {0} {2} {1}'.format('Python', 'Script', 3.6)) # ![](https://dojang.io/pluginfile.php/5238/mod_page/content/1/025002.png) # In[23]: print('{0} {0} {1} {1}'.format('Python', 'Script')) # In[24]: print('Hello, {language} {version}'.format(language='Python', version=3.6)) # In[25]: print('%3d' % 1) print('{0:3d}'.format(1)) # In[26]: print('%03d' % 1) print('{0:03d}'.format(1)) # In[27]: print('%.2f' % 3.6) print('{0:.2f}'.format(3.6)) # - 구구단 출력 포맷팅 # In[28]: for i in range(2, 10): for j in range(1, 10): print("{0} x {1} = {2:2d}".format(i, j, i*j)) print() #

참고 문헌: 파이썬(열혈강의)(개정판 VER.2), 이강성, FreeLec, 2005년 8월 29일