09. 문자열
Strng 관련 함수
#-*- coding:ms949 -*-
s = 'i like Programming'
print(s.upper()) #대문자로
print(s.lower()) #소문자로
print(s.capitalize()) #첫글자만 대문자
print(s.swapcase()) #대소문자변경
print(s.title()) #단어의 첫글자만 대문자로
print(s.center(40)) #길이 40에서 가운데 정렬하여 반환
print(s.isdigit()) #숫자인가
print(s.isalpha()) #문자인가
print(s.isalnum()) #숫자+문자인가
s1 = 'i like Programming like python'
print(s1.count('like')) #like 가 나온 횟수: 2 / 못찾는 경우 -1 리턴
print(s1.find('like')) #like 가 처음 나오는 위치의 인덱스: 2
print(s1.find('like',3)) #3번 인덱스부터 like 가 나오는 위치의 인덱스: 19
print(s1.rfind('like')) #뒤에서부터 like 가 나오는 위치의 인덱스: 19
print(s1.index('like')) #find와 동일함. 단, 못찾는 경우 ValueError 발생
print(s1.startswith('i')) #시작이 i로 시작하는지 확인 True 반환
print(s1.endswith('pyth')) #마지막이 pyth로 끝나는지 확인 False 반환
print(s1.replace('like', 'love')) #문장의 모든 like가 love로 바뀜
print(s1.split()) #공백을 기준으로 잘라서 list 형태로 return
print(s1.split(sep=' ', maxsplit=2))#공백을 기준으로 자르되 최고 2번만 자르기.
print(s1.splitlines()) #라인을 기준으로 나눔
s2 = ' my name is kim '
print(s2.strip()) #좌우공백제거. 우측 공백제거 rstrip, 좌측 공백제거 lstrip
s3 = '###my name is kim###'
print(s3.strip('#')) #좌우 '#'제거
myStr = ['aaa','bbb','ccc','ddd']
print('-'.join(myStr)) #주어진 문자를 사용하여 list 결합 aaa-bbb-ccc-ddd
substring - http://stackoverflow.com/questions/663171/is-there-a-way-to-substring-a-string-in-python
>>> x = "Hello World!"
>>> x[2:]
'llo World!'
>>> x[:2]
'He'
>>> x[:-2]
'Hello Worl'
>>> x[-2:]
'd!'
>>> x[2:-2]
'llo Worl'
"H-e-l-l-o- -W-o-r-l-d"[::2] # outputs "Hello World"
정규표현식
import re
[플래그] | [내용] |
I, IGNORECATE | 대, 소문자를 구별하지 않는다 |
L, LOCATE | \w, \W, \b, \B를 현재의 로케일에 영향을 받게 한다 |
M, MULTILINE | ^가 문자열의 맨 처음, 각 라인의 맨 처음과 매치 된다 $는 문자열의 맨 끝, 각 라인의 맨 끝과 매치 |
S, DOTALL | .을 줄바꾸기 문자도 포함하여 매치하게 한다 |
U, UNICODE | \w, \W, \b, \B가 유니코드 문자 특성에 의존하게 한다 |
X, VERBOSE | 정규식 안의 공백은 무시된다 |
[메소드] | [설명] |
compile(pattern[, flags]) | pattern을 컴파일하여 정규식 객체를 반환 |
match(pattern, string[,flags]) | string의 시작부분부터 pattern이 존재하는지 검사하여 MatchObject 인스턴스를 반환 |
search(pattern, string[,flags]) | string의 전체에 대해서 pattern이 존재하는지 검사하여 MatchObject 인스턴스를 반환 |
split(pattern, string[, maxplit=0]) | pattern을 구분자로 string을 분리하여 리스트로 반환 ex) '[,- ]' 패턴을 주면 , - 공백으로 나눈 리스트 반환 |
findall(pattern, string[, flags]) | string에서 pattern을 만족하는 문자열을 리스트로 반환 |
finditer(pattern, string[, flags]) | string에서 pattern을 만족하는 문자열을 반복자로 반환 |
sub(pattern, repl, string[, count=0]) | string에서 pattern과 일치하는 부분에 대하여 repl로 교체하여 결과 문자열을 반환 |
subn(pattern, repl, string[, count=0]) | sub와 동일하나, 결과로(결과문자열, 매칭횟수)를 튜플로 반환 |
escape(string) | 영문자 숫자가 아닌 문자들을 백슬래쉬 처리해서 리턴. (임의의 문자열을 정규식 패턴으로 사용할 경우 유용) |
Match객체는 match(), search()의 수행 결과로 생성되며, 검색된 결과를 효율적으로 처리할 수 있는 기능 제공. ◎ Match객체가 지원하는 메소드와 속성 | |
[메소드] | [속성] |
group([group1, ...]) | 입력받은 인덱스에 해당하는 매칭된 문자열 결과의 부분 집합을 반환합니다.인덱스가 '0'이거나 입력되지 않은 경우 전체 매칭 문자열을 반환합니다. |
groups() | 매칭된 결과를 튜플 형태로 반환. 정규표현식에 () 괄호를 사용해 그룹핑 필요 |
groupdict() | 이름이 붙여진 매칭 결과를 사전 형태로 반환 |
start([group]) | 매칭된 결과 문자열의 시작 인덱스를 반환. (인자로 부분 집합의 번호나 명시된 이름이 전달된 경우, 그에 해당하는 시작 인덱스를 반환) |
end([group]) | 매칭된 결과 문자열의 종료 인덱스를 반환. (인자로 부분 집합의 번호나 명시된 이름이 전달된 경우, 그에 해당하는 종료 인덱스를 반환) |
pos | 원본 문자열에서 검색을 시작하는 위치입니다. |
endpos | 원본 문자열에서 검색을 종료하는 위치입니다. |
lastindex | 매칭된 결과 집합에서 마지막 인덱스 번호를 반환. (일치된 결과가 없는 경우에는 None을 반환) |
lastgroup | 매칭된 결과 집합에서 마지막으로 일치한 이름을 반환. (정규식의 매칭 조건에 이름이 지정되지 않았거나 일치된 결과가 없는 경우 None 반환) |
string | 매칭의 대상이 되는 원본 문자열입니다. |
[ 반복 메타 문자 ] | |
[메타 문자] | [의미] |
* | 0회 이상 반복 ex) a* |
+ | 1회 이상 반복 ex) a+ |
? | 0회 or 1회 ex) a? |
{m} | m회 반복 |
{m, n} | m회부터 n회까지 반복 |
[ 매칭 메타 문자 ] | |
[메타 문자] | [의미] |
. | 줄바꿈 문자를 제외한 모든 문자와 매치됨 |
^ | 문자열의 시작과 매치됨 ex) ^문자열 |
$ | 문자열의 마지막과 매치됨 ex) 문자열$ |
[ ] | 문자 집합 중 한 문자를 의미 |
| | 또는(or)를 의미 |
( ) | 정규식을 그룹으로 묶음. groups 메소드를 이용해 출력 시 필요 |
[ 이스케이프 기호 ] | |
[종류] | [설명] |
\d | 모든 숫자와 매치됨 [0-9] |
\D | 숫자가 아닌 문자와 매치됨 [^0-9] |
\s | 화이트 스페이스 문자와 매치됨 [ \t\n\r\f\v] |
\S | 화이트 스페이스가 아닌 것(특수문자 포함)과 매치됨 [^ \t\n\r\f\v] |
\w | 숫자 또는 문자와 매치됨 [a-zA-Z0-9_] |
\W | 숫자 또는 문자가 아닌 것과 매치됨 [^a-zA-Z0-9_] |
\b | 단어의 경계를 나타냄. 단어는 영문자 혹은 숫자의 연속 문자열 |
\B | 단어의 경계가 아님을 나타냄 |
\A | 문자열의 처음에만 일치 |
\Z | 문자열의 끝에만 일치 |
[ 최소 매칭을 위한 정규식 ] | |
[기회] | [의미] |
*? | *와 같으나 문자열을 취소로 매치함 |
+? | +와 같으나 문자열을 취소로 매치함 |
?? | ?와 같으나 문자열을 최소로 매치함 |
{m,n}? | {m,n}과 같으나 문자열을 최소로 매치함 |
json 포맷 파싱
import json
json.loads ( "json string") 딕셔너리로 반환
json.dumps 딕셔너리를 json으로 저장
xml 포팻 파싱
기본 library 사용
import xml.etree.ElementTree as ET
import urllib.request as MYURL
kiaURL = 'http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=109'
response = MYURL.urlopen(kiaURL)
xmlData = response.read().decode('utf-8')
rss = ET.fromstring(xmlData)
for element in rss.findall("./channel/item/description/body/location/data"):
print(element.findtext('tmEf'), element.findtext('wf'))
BeautifulSoup library 사용 - http://www.crummy.com/software/BeautifulSoup/
from bs4 import BeautifulSoup
import urllib.request as MYURL
jURL = 'http://rss.joins.com/joins_news_list.xml'
response = MYURL.urlopen(jURL)
soup = BeautifulSoup(response)
for item in soup.findAll('item'):
print( 'title:', item.title.string )
print( 'description:', item.description.string )
#BeautifulSoup에서는 속성값은 element[key]로 하면됨