: 모든것은제자리에있습니다. 순천향대학교컴퓨터공학과이상정 순천향대학교컴퓨터공학과 1 학습내용 모든프로그램은데이터를처리 중요한데이터중하나가텍스트 (text) 데이터 텍스트데이터는문자, 문자열로구성 이장에서는텍스트데이터를검색하고, 위치를찾는프로그램학습 메서드와같은핵심적인프로그래밍개념습득 라이브러리코드를사용하여프로그래밍능력향상 ASCII 코드, 유니코드, UTF-8 순천향대학교컴퓨터공학과 2
스타버즈커피응용예 스타버즈커피는커피전문프랜차이즈 스타버즈 CEO 는순익을더올리기위해좋은아이디어가떠올랐음 커피원두의현재시가를보여주는프로그램을작성해서스타버즈지점에서언제원두를사야하는지의판단을지원하는프로그램이필요 순천향대학교컴퓨터공학과 3 원두가격웹사이트 Beans R US ( 빈자러스 ) 웹사이트에서커피원두의현재가격정보를가져옴 http:// cs.sch.ac.kr/prices.py 순천향대학교컴퓨터공학과 4
지금까지구현된스타버즈코드 [ 실습 1] import urllib.request page = urllib.request.urlopen("http://cs.sch.ac.kr/prices.py") text = page.read().decode("utf8") print(text) 지금까지아래와같이파이썬코드를구현 무엇을하는코드? 순천향대학교컴퓨터공학과 5 보층학습 코드분석 import urllib.request urllib.request 모듈 ( 라이브러리 ) 참조 page = urllib.request.urlopen("http://cs.sch.ac.kr/ prices.py") urlib.request 모듈의 urlopen 함수 지정된 url(uniform resource locator, 웹사이트주소 ) 의웹페이지를가져와서 page (HTTPResponse 객체 ) 에저장 웹페이지는 HTML 문서 HTML(HyperText Markup Language) text = page.read().decode("utf8") utf8 로코드화된 (encode) 문서를해독 (decode) 하여유니코드 (Unicode) 로 text 에저장 이장끝보충학습에서소개 순천향대학교컴퓨터공학과 6
시험주행 순천향대학교컴퓨터공학과 7 가격은 HTML 안에 구현된코드는 HTML 텍스트전체를가져옴 HTML 은원래웹페이지를작성하기위한언어 원두커피가격은출력메시지중간에있음 순천향대학교컴퓨터공학과 8
스트링 스트링 (string) 은연속된문자들로문자열이라고함 스타버즈프로그램에서출력된내용은스트링의한예 스트링의어딘가에있는원두의가격에해당하는문자추출하면가격정보만추출할수있음 순천향대학교컴퓨터공학과 9 텍스트안에서글자찾기 (1) 컴퓨터는두가지정보를사용하여글자위치기억 스트링의시작위치와각글자의오프셋 (offset) 순천향대학교컴퓨터공학과 10
텍스트안에서글자찾기 (2) 파이썬에서는변수이름다음대괄호안에오프셋값으로특정글자를지정 오프셋값을인덱스 (index) 라고도함 대괄호안에두개의인덱스를사용하여서브스트링 (substring) 표시 text[3] => "m" text[7:11] => "head" 두번째인덱스 ( 이것자체는제외 ) 까지의일련의글자 11-7 = 4 글자 순천향대학교컴퓨터공학과 11 스타버즈코드 - 가격정보추출 [ 실습 2] HTML 전체텍스트에서가격정보는인덱스 172:176 까지 4 글자 import urllib.request page = urllib.request.urlopen("http://cs.sch.ac.kr/prices.py") text = page.read().decode("utf8") price = text[172:176] print(price) 순천향대학교컴퓨터공학과 12
시험주행 순천향대학교컴퓨터공학과 13 Beans R US 우수고객사이트 Beans R US 는우수고객에게다음사이트에할인된원두커피가격정보를제공 http://cs.sch.ac.kr/prices-loyalty.py 순천향대학교컴퓨터공학과 14
스타버즈코드 - 우수고객사이트 스타버즈도 Beans R US 우수고객이되어우수고객사이트로접속하도록코드수정 import urllib.request page = urllib.request.urlopen("http://cs.sch.ac.kr/prices-loyalty.py") text = page.read().decode("utf8") price = text[172:176] print(price) 순천향대학교컴퓨터공학과 15 시험주행 순천향대학교컴퓨터공학과 16
가격정보위치변경 우수고객에대한웹페이지는동적이어서가격정보의위치가수시로변경됨 이전페이지처럼고정된위치인덱스 172 에서시작하지않음 변하지않는것은가격정보가언제나서브스트링 ">$" 다음에시작한다는것 순천향대학교컴퓨터공학과 17 파이썬스트링메서드 (1) 파이썬은스트링변수를처리하는다양한내장된기능을제공 예 : msg = "Soonchunhyang University" print(msg.upper()) => SOONCHUNHYANG UNIVERSITY 출력 msg 는스트링변수 ( 객체 ) upper() 는스트링메서드라고함 메서드는스트링에대한특정처리를요청하는내장된기능 upper() 는스트링변수에게데이터의대문자버전을요청하는메서드 순천향대학교컴퓨터공학과 18
파이썬스트링메서드 (2) 메서드 text.startswith("<html>") text.endswith(".jpg") text.upper() text.lower() text.replace("hate","love") text.strip() text.find("python") 메서드가하는일 스트링제일앞에주어진서브스트링을갖고있다면참을반환 스트링제일뒤에주어진서브스트링을갖고있다면참을반환 대문자로변환된스트링사본을반환 소문자로변환된스트링사본을반환 스트링에서모든특정서브스트링을다른서브스트링으로바꾼후바뀐스트링사본을반환스트링의앞뒤공백을제거한스트링사본을반환 주어진서브스트링이발견된첫번째인덱스값을반환 순천향대학교컴퓨터공학과 19 스타버즈코드 - 우수고객사이트 [ 실습 3] import urllib.request page = urllib.request.urlopen("http://cs.sch.ac.kr/prices-loyalty.py") text = page.read().decode("utf8") where = text.find(">$") start_of_price = where + 2 end_of_price = start_of_price + 4 price = text[start_of_price: end_of_price] print(price) 순천향대학교컴퓨터공학과 20
시험주행 순천향대학교컴퓨터공학과 21 원하는가격이될때알림 스타버즈 CEO 는커피원두가격이 $4.74 이하로내려가는때를알고싶어함 프로그램은가격이내려갈때까지 Beans R US 웹사이트를계속감시 프로그램에루프를추가해서원두가원하는가격이될때실행을멈춤 순천향대학교컴퓨터공학과 22
스타버즈코드 - 원하는가격알림 import urllib.request price = 99.99 while price > 4.74: page = urllib.request.urlopen("http://cs.sch.ac.kr/pricesloyalty.py") text = page.read().decode("utf8") where = text.find(">$") start_of_price = where + 2 end_of_price = start_of_price + 4 price = text[start_of_price: end_of_price] print("buy!") 순천향대학교컴퓨터공학과 23 시험주행 TypeErrorr 가의미하는것은? 순천향대학교컴퓨터공학과 24
스트링형과숫자형 프로그램에서스트링과숫자를비교해서에러 price > 4.74 변수를참조할때데이터형 (type) 을고려 두데이터가서로다른형이라면서로비교할수없음 서로같은형이되도록형변환 형변환예 알아맞히기게임 guess = int(g) -> 스트링 g 를정수형으로변환하여 guess 에저장 float("4.99") -> 부동소수점숫자 ( 실수 ) 로변환 순천향대학교컴퓨터공학과 25 스타버즈코드 - 원하는가격알림 [ 실습 4] import urllib.request price = 99.99 while price > 4.74: page = urllib.request.urlopen("http://cs.sch.ac.kr/pricesloyalty.html") text = page.read().decode("utf8") where = text.find(">$") start_of_price = where + 2 end_of_price = start_of_price + 4 price = float(text[start_of_price: end_of_price]) print("buy!") 순천향대학교컴퓨터공학과 26
시험주행 순천향대학교컴퓨터공학과 27 Beans R US 서버과부하 Beans R US 서버에과부하를유발 price 값이 4.74 보다크면루프를반복하고다시요청 프로그램은시간당수천개의요청을전송 전세계모든스타버즈매장이같은프로그램을사용하여수많은요청을서버에전송 가격정보요청을천천히전송하는방법은? 순천향대학교컴퓨터공학과 28
라이브러리 시간라이브러리 (library) 를사용하여매 15 분마다요청 라이브러리란? 프로그램에서사용할수있도록미리작성된코드들 < 라이브러리이름 >.< 함수이름 > 라이브러리사용예 import urllib.request -> urllib.request 라이브러리를사용하겠다고선언 page = urllib.request.urlopen("http://...") -> urllib.request 라이브러리의 urlopen() 함수호출 순천향대학교컴퓨터공학과 29 파이썬시간라이브러리 함수 time.clock() time.daylight() time.gmtime() time.localtime() time.sleep(secs) time.time() time.timezone() 함수가하는일 호출된이후부동소수점수로표현된초단위의경과시간 ( 윈도우 ) 현재일광절약시간 (daylight savings time, 서머타임 ) 이적용되어있지않으면 0을반환현재의 UTC(Universal Time Coordinated, 협정세계시 ) 날짜와시간을알려줌현재의지역시간을알려줌 지정한시간 ( 초 ) 동안아무일도하지않음 1970 년 1 월 1 일이후지나온시간을초단위로알려줌 UTC 표준시간대 ( 런던 ) 와지역표준시간대간의시차를시간단위로알려줌 순천향대학교컴퓨터공학과 30
스타버즈코드 : 웹요청지연 [ 실습 5] import urllib.request import time price = 99.99 while price > 4.74: time.sleep(900) page = urllib.request.urlopen("http://cs.sch.ac.kr/pricesloyalty.html") text = page.read().decode("utf8") where = text.find(">$") start_of_price = where + 2 end_of_price = start_of_price + 4 price = float(text[start_of_price: end_of_price]) print("buy!") 순천향대학교컴퓨터공학과 31 시험주행 순천향대학교컴퓨터공학과 32
프로그래밍도구상자 (1) 프로그래밍도구 스트링은일련의개별문자들로구성 스트링에서개별문자들은인덱스로참조 인덱스값은 0에서시작하는오프셋 메서드로변수에내장된기능을사용 라이브러리는미리구현된연관있는기능들의집합 변수안의데이터는값뿐만아니라데이터형도갖고있음 숫자는데이터형 스트링도데이터형 순천향대학교컴퓨터공학과 33 프로그래밍도구상자 (2) 파이썬도구 s[4] 는스트링인 s 변수의 5 번째글자를나타냄 s[6:12] 는스트링 s내의 7번째부터 13번째 ( 이것자체는제외 ) 까지의서브스트링을나타냄 s.find() 메서드는스트링을검색 s.upper() 메서드는스트링을대문자로변환 float() 는스트링을부동소수점수 ( 실수 ) 로변환 + 는더하기연산자 > 는보다크다연산자 urllib.request는웹접속을위한라이브러리 시간라이브러리 (time) 는날짜 / 시간에관한기능을제공 순천향대학교컴퓨터공학과 34
보충학습 ASCII 코드 ASCII 코드 American Standard Code for Information Interchange 미국에서표준화한정보교환용 7비트부호체계 000(0x00) 부터 127(0x7F) 까지총 128개의부호가사용 순천향대학교컴퓨터공학과 35 보충학습 유니코드 컴퓨터는 1,0 만을저장하므로문자는미리정의된 2 진값 ( 코드 ) 으로표현 유니코드 (Unicode) 는전세계문자를컴퓨터로표현하는산업표준 31 비트코드, 대부분 21 비트로표현 U+16 진수로표시 ASCII ( 영문, 숫자, 기호 ): U+00 U+7F ex) U+41 A,..., U+7A z 한글코드범위 : U+AC00 U+D7AF ex) U+AC00 가, U+AC01 각,..., U+D7A3 힣 http://ko.wikipedia.org/wiki/ 유니코드참조 순천향대학교컴퓨터공학과 36
보충학습 한글유니코드... 순천향대학교컴퓨터공학과 37 보충학습 UTF-8 UTF (Unicode Transformation Format) 유니코드를위한가변길이문자인코딩방식 UTF-8 유니코드한문자를나타내기위해 1-4 바이트사용 변환 U+0000 U+007F, 7 비트 => 그대로인코딩, ASCII 해당 U+0080 U+07FF, 11 비트 => 110xxxxx 10xxxxxx U+0800 U+FFFF, 16 비트 => 1110xxxx 10xxxxxx 10xxxxxx 한글해당 U+10000 U+1FFFFF, 21 비트 => 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx http://ko.wikipedia.org/wiki/utf-8 참조 순천향대학교컴퓨터공학과 38
보충학습 UTF-8 변환예 A, 가유니코드변환 A U+41 100 0001 7 비트 => 그대로인코딩 가 U+AC00 1010 1100 0000 0000 16 비트 => 1110xxxx 10xxxxxx 10xxxxxx 11101010 10110000 10000000 EA B0 80 순천향대학교컴퓨터공학과 39 2 장실습 [ 실습 1] 스타버즈첫코드 [ 실습 2] 스타버즈코드 - 가격정보추출 [ 실습 3] 스타버즈코드 - 우수고객사이트 [ 실습 4] 스타버즈코드 - 원하는가격알림 [ 실습 5] 스타버즈코드 : 웹요청지연 [ 실습 6] UTF-8 변환예 순천향대학교컴퓨터공학과 40
2 장과제 1. [ 실습 1] ~ [ 실습 6] 의프로그램작성및실행과정 2. 스타버즈코드 : 원하는가격알림 을수정하여작성하고실행 원하는가격이될때를알리고, 해당가격과시간도출력 3. 앞에서배운내용을사용한임의의프로그램작성 ( 임의의웹페이지접속하여분석하는프로그램추천 ) 프로그램설명 프로그램소스 실행결과 순천향대학교컴퓨터공학과 41