In [1]:
# 정규표현식( 텍스트 => 텍스트에서 의미 있는 데이터만 뽑아내는)
# 하나의 언어라고 보면 된다. 사실 엄청나게 복잡한 분야이다.
# 정규표현식으로 들어가기 위한 개요
# 테스팅 개요
In [2]:
def double(x):
"""x를 받아서 2배 불려주는 좋은 함수입니다."""
return x * 2
In [3]:
double?
In [4]:
# 테스트 코드(넓은 의미의)
if not double(2) == 4:
raise Exception()
if not double(10) == 20:
raise Exception()
In [5]:
def double(x):
return x * 2 + 1
if not double(2) == 4:
raise Exception()
# 이렇게 하면 오류
In [ ]:
#테스크 코드 조금 더 쉽게 하기 위해서 assert라는 것이 있다.
assert double(5) is 10
In [6]:
assert double(10) == 20
In [7]:
# 우선 형태만 보면
# class TestDoubleFunction(unittest.TestCase):
# def test_5_should_return_10(self):
# self.assertEqual(double(5), 10) # 이거랑 동일 assert double(5) == 10
# 주피터노트북에서는 이러한 형태로 테스트 못한다. 그래서 일단 pass
In [8]:
# 우선 hello.py라는 txt파일을 만든다. 안에 내용은
# def hello(name):
# print("hello, {name}".format(name=name))
# hello("kimkipoy")
# hello("김기표")
In [9]:
%run hello.py
In [10]:
# 직접 해 볼 양식
# "김기표, 010-6235-3317, 주소\"
# def preprocess_user_information(information):
# pass
# "김기표, 010-6235-****"
#함수를 짜기 전에 먼저 테스트 코드를 짠다.
In [11]:
def preprocess_user_information(information):
return information[:-4] + "****"
assert preprocess_user_information("김기표, 010-6235-3317") == "김기표, 010-6235-****"
assert preprocess_user_information("김기정, 010-6666-3317") == "김기정, 010-6666-****"
assert preprocess_user_information("김기, 010-1111-5736") == "김기, 010-1111-****"
In [ ]:
In [12]:
#root폴더에다가 txt파일을 만들어라. 아래와 같은 양식으로
# 김기표, 880518-1111111
# 김기표일, 880518-222222
# 김기표이, 880518-333333
# 김기표삼, 880518-444444
# 김사, 880518-555555
In [13]:
def get_information(file_name):
with open(file_name, "r", encoding='utf8') as f:
return f.read()
In [14]:
get_information("info.txt")
Out[14]:
In [15]:
info_file = get_information("info.txt")
informations = info_file.split("\n")
informations
# information = f.readlines()
Out[15]:
In [16]:
# 프린트를 테스팅하는 것은 불가능
# 프린트 하기 전에 이것을 별로 만들어주는 함수를 만들고 그것을 테스트
def preprocess(information):
return information[:-7] + "*" * 7
assert preprocess("김기표, 880518-1111111") == "김기표, 880518-*******"
assert preprocess("김기표일, 880518-2222222") == "김기표일, 880518-*******"
In [17]:
[
preprocess(information)
for information
in informations
]
Out[17]:
In [18]:
# 정규표현식 ( = Regular Expression; Regex )
# 기본 원리만 알면 => 다 적용할 수 있습니다. ( 기본 원리가 아주 많은 문법 )
info_file
Out[18]:
In [19]:
import re #re라는 패키지에서 정규표현식 제공
In [20]:
pattern = re.compile("(?P<birth>\d{6})[-]\d{7}")
# 940223-1701234 => birth == "940223" (birth는 변수명)
In [21]:
pattern.sub("\g<birth>-*******", info_file)
Out[21]: