paramiko를 이용해 db에서 input값을 가져온뒤 그 값을 request로 보내고 response로 받은 값을 정규식을 통해 필터링 후의 값들을 db에 저장하는 실습을 하였다
(내가 이해한 대로 적어서 틀릴 수도 있음)
- paramiko를 활용하여서 진행한다.
- request는 HTTP를 사용하기 위한 라이브러리 get방식은 requests.get(), post방식은 requests.post, put방식은 requests.put(), delete방식은 requests.delete()
- 응답은 response로 받고 속성은 status_code(응답 상태 확인), headers(헤더정보 확인), cookies(쿠키정보 확인), encoding(데이터 인코딩 확인), text(str 타입의 데이터), content(bytes 타입의 데이터), json()(dict 타입의 데이터 일 경우 사용)
- requests.get에 timeout을 걸어서 시간이 지나면 exception을 발생시키고 에러처리를 할 수 있다.
- for else 문: for문이 중간에 빠져나오지 않고 완전히 다 실행 되면 실행하는 문장
- 정규표현식 정리
패턴 | 설명 | 예제 |
^ | 이 패턴으로 시작해야 함 | ^abc로 시작해야 함 (abcd,abc12 등) |
$ | 이 패턴으로 종료되어야 함 | xyz$: xyz로 종료되어야 함 (123xyz, strxyz 등) |
[문자들] | 문자들 중에 하나이어야함. 가능한 문자들의 집합을 정의함 | [Pp]ython: Python 또는 python |
[^문자들] | [문자들]의 반대로 피해야할 문자들의 집합을 정의함 | [^aeiou] 소문자 모음이 아닌 문자들 |
| | 두 패턴 중 하나이어야 함 (or) | a|b a또는 b |
? | 앞 패턴이 없거나 하나 이어야 함 (Optional 패턴을 정의 할 때 사용) | \d?: 숫자가 하나 있거나 없어야 함 |
+ | 앞 패턴이 하나 이상이어야 함 | \d+: 숫자가 하나 이상이어야 함 |
* | 앞 패턴이 0개 이상이어야 함 | \d*: 숫자가 없거나 하나 이상이어야 함 |
패턴{n} | 앞 패턴이 n번 반복해서 나타나는 경우 | \d{3} : 숫자 3개가 있어야 함 |
패턴{n,m} | 앞 패턴이 최소 n, 최대 m번 반복해서 나타나는 경우(n또는 m 생략가능) | \d{3,5}: 숫자가 3개 또는 4개 또는 5개 있어야 함 |
\d | 숫자 0~9 | \d\d\d: 0~9 범위의 숫자 3개 의미 |
\w | 문자 | \w\w\w : 문자 3개를 의미 |
\s | 화이트 스페이스(공백)[\t,\n,\r,\f]와 동일 | \s\s : 화이트 스페이스 문자 두개 의미 (\r\n,\t\t 등) |
. | 뉴라인(\n)을 제외한 모든 문자를 의미 | .{3} : 모든 문자3개 (F15, 0x0 등) |
파이썬에서 정규 표현식을 지원하는 re 모듈
re(regular expression) 모듈제공
사용 예)
>>> import re
>>> p = re.compile('ab*')
re.compile을 사용하여 정규 표현식을 컴파일한다. re.compile의 리턴값을 객체 p(컴파일된 패턴 객체)에 할당해 그 이후의 작업을 수행할 것이다.
정규식을 이용한 문자열 검색 메서드
Method | 목적 | |
match() | 문자열의 처음부터 정규식과 매치되는지 조사한다. | |
search() | 문자열 전체를 검색하여 정규식과 매치되는지 조사한다. | |
findall() | 정규식과 매치되는 모든 문자열(substring)을 리스트로 리턴 | |
finditer() | 정규식과 매치되는 모든 문자열 (substring)을 반복 가능한 객체로 리턴한다. |
정규식 그룹화 구문
그룹화 구문은 파이썬의 정규식을 하위 표현식 또는 그룹으로 나누며 다음과 같은 목적으로 사용됨
- 그룹화 : 그룹은 단일 구문 엔티티를 나타냅니다. 추가적인 메타 문자는 전체 그룹을 하나의 단위로 하여 적용됩니다.
- 캡쳐 : 일부 그룹화 구문은 그룹의 하위 표현식과 일치하는 검색 문자열 부분도 캡처
그룹화
정규식 | 설명 | 매치 | 예제 |
bar+ | +가 문자 ‘r’에만 적용 된다. | ‘ba’ 뒤에 하나 이상의 ‘r’과 매치 | ‘bar’,’barr’,’barrr’ |
(bar)+ | +가 ‘bar’에 적용된다. | 한 개 이상의 ‘bar’과 매치 | ‘bar’, barbar’,’barbarbar’ |
캡쳐
group(index= 1부터 시작) 함수 ()감싼 부분 중 index에 해당하는 부분 반환 index 0은 전체 부분 (default)
group(): 정규식 전체의 일치부분을 찾음
groups(): 명시적으로 캡처(괄호로 감싼 부분)한 부분을 반환한다.
예시
m = re.search('\d{4}-(\d?\d)-(\d?\d)', '1868-12-10')
print('m:', m)
print('m.group():', m.group())
for i in range(0, 3):
print('m.group({}): {}'.format(i, m.group(i)))
print('m.groups():', m.groups())
결과
m: <_sre.SRE_Match object; span=(0, 10), match='1868-12-10'>
m.group(): 1868-12-10
m.group(0): 1868-12-10
m.group(1): 12
m.group(2): 10
m.groups(): ('12', '10')
비 캡쳐 그룹은 이해 못함
하는 법은 (?:’정규식’)으로 사용함
'python' 카테고리의 다른 글
7일차 (0) | 2024.02.07 |
---|---|
6일차 (1) | 2024.02.07 |
5일차 교육 (0) | 2024.02.06 |
교육 3일차 paramiko (0) | 2024.02.01 |
교육 1일차 + 2일차 (0) | 2024.01.31 |