파이썬 심화(DB연동과 정규식)

오상윤·2023년 1월 3일
0

파이썬 심화

목록 보기
8/9

DB연동과 정규식

DB연동

database

  • 특정 다수의 이용자들에게 조직 내에서 필요로 하는 정보를 체계적으로 축적하는 저장소
  • 이 저장소에 자주 쓰이는 언어로 sql이 있다.
# db연동
import sqlalchemy
# DB연동(sqlite)
engine = sqlalchemy.create_engine('sqlite:///test.sqlite')
# DB연동
conn = engine.connect()
# DB실행 구문(sql 로직)
conn.execute("CREATE TABLE test (col1 text, col2 text)")
conn.execute("INSERT INTO test VALUES ('test1', 'test2')")
conn.execute('select + from test').fetchall()
conn.close()

정규식

  • 특정한 규칙을 가진 문자의 집합을 표현할 떄 사용하는 언어
  • 문자열에서 특정한 조건을 만족하는 경우를 걸러낼 때, 일반적인 조건문으로는 다소 복잡할 수도 있지만, 정규 표현식을 이용하면 매우 간단
  • 파이썬에서만 쓰이는 것이 아닌 general한 방식의 언어이기 때문에 익혀 두면 다른 언어에도 도움이 됨
  • 파이썬에서 정규식은 re모듈이 제공
    • * : 0회 이상의 반복
    • + : 최소 1회 이상의 반복
    • ? : 0이나 1회 반복
    • {m} : M회 반복을 허용
    • {m,n} : M회부터 n회까지 반복허용
    • . : 줄 바꿈 문자를 제외한 문자
    • ^ : 문자열의 시작과 매칭
    • $ : 끝나는 문자열
    • [] : 문서 집합을 의미
    • \ : 또는
    • \d : 모든 숫자
    • \D : 숫자가 아닌 문자
    • \s : 화이트 스페이스(빈칸)와 매칭
    • \S : 화이트 스페이스가 아닌 문자와 매칭
    • \w : 숫자 또는 문자
    • \W : 숫자 또는 문자가 아닌 것
import re
p = re.compile("[a-z]+") # 영문자 소문자 여러개
#             012345678
m = p.search("5 python")
print(m.start() + m.end()) # 2 + 8
# m.start() pattern에 맞는 첫번째 인덱스
# m.end() pattern에 맞는 마지막 인덱스
test = ['123','1241251','010-1234-5678','152515','126236-26362','2362362362']
for i in test:
    tmp = i.split('-')
    if len(tmp) != 3:
        continue
    tmp[0][0] == '0' or tmp[0][0] =='1' or tmp[0][0]
import re
data = """
park 010-1234-5678
kim 010-1111-2222"""
#               이름      전화번호 1,2 전화번호 끝 4자리
p = re.compile('(\w+)\s(\d+[-]\d+)[-](\d+)')
print(p.sub("\g<2>-**** \g<1>", data))
print('========================')
for i in data.split("\n"): # 3건 공란,2건
    m = p.search(i)
    if m != None:
        print(m.group(2)+"-****"+" "+m.group(1))
import re
p = re.compile('[a-z]', re.I) # re.I 대소문자 구별 안함
m = p.match('python')
print(m)
m = p.match("Python")
print(m)
m = p.match('PYTHON')
print(m)
import re
# r은 raw 첫글자 _또는 영문자 두번째부터 숫자/문자 여러개
p = re.compile(r'[_a-zA-Z]\w*')
m = p.search('123 abc 123 def')  # 조건에 맞는 단어 하나
print(m.group())
m = p.findall('123 abc 123 def') # 조건에 맞는 것 모두, 리스트형식
print(m)
p = re.compile('the')
print(p.findall('The cat was hungry,He was scared because of the cat'))
p = re.compile('the', re.I) # I : ignore 대소문자 구별 안함
print(p.findall('The cat was hungry,He was scared because of the cat'))
# 괄호를 통해서 그룹핑을 할 수 있다.
# 그 후에 \g<그룹번호>를 통해 불러올 수 있다.
# 주민번호 뒷자리를 별표로 변경
import re  # 정규식을 지원하는 모듈
data = """ 
park 800905-1049118
kim  700905-1059119 
"""
pat = re.compile("(\d{6})-(\d{7})") # 숫자6자리-숫자7자리
print(pat.sub("\g<1>-*******",data))        # \g
profile
가보자가보자~

0개의 댓글