이 페이지는 네이버커넥티드의 최성철 교수님의 교육자료를 참고했습니다.
목차
1. File / Exception / Log Handling
2. Python data handling (파이썬에서 사용가능한 데이터타입 4가지 csv,xml,jsoon,html 알아보기)
File / Exception / Log Handling
강의 소개
파일, 예외처리, 로그 남기기에 대해 알아보기.
- 파일 : 실제 프로그램을 작성할 때는 파일에 존재하는 데이터를 사용하는 경우가 많습니다.
- 예외 : 대부분의 경우 프로그램에는 우리가 예상치 못한 오류가 생기곤 합니다. 사전에 모든 경우를 다 지정해서 대비하는 경우도 있지만, 특정 상황에서 발생할 수 있는 예외를 포괄적으로 지정해서 대비하는 경우도 있습니다.
- 로그 : 로그 데이터를 남기는 건 오늘날 데이터 기반의 애플리케이션 개발에서 매우 중요한 이슈가 되고 있습니다. 로그 데이터를 설계하는 것이 하나의 분야로 자리잡고 있을 만큼 매우 관심을 받고 있습니다.
1. Eception handling
- 예상이 가능한 예외, 불가능한 예외
- 예상가능한 에러 : 이름을 입력할곳에 전화번호 입력, 사용자가 주소 안넣기
- 예상 불가능 에러 : 인터프리터 과정에서 발생함, 리스트의 범위를 넘어가는 에러, 수행 불가시 인터프리터가 자동 호출
- 예상이 불가능한경우 eception handling 이나 if문을 사용한다.
- 에러 처리 방법: 이프문 ,Eception handling 을 사용한다.
- try ~ except문법
try:
예외 발생 가능 코드
except Exception Type:
예외 발생시 대응 코드
for i in range(10):
try:
print(10 / i) // 10을 0으로 나누면 에러
except ZeroDivisionError as e:
print(e)
print("Not divided by 0")
- try ~ except ~ else 문법 : 에러 없으면 else 찍음
- try ~ except ~ else ~ finally 문법 : finally 예외랑 상관없이 실행(else 있으면 else찍고)
- 그 외)
- raise 구문 : 필요에 따라 강제로 Eception을 발생(정수 원하는 입력이 아니면 Eception을 발생 시킬수 잇음.)
- assert구문 : assert isinstance(number, int) , 코드에서 number값이 int 가 아니면 false 면 코드 종료시킴
- eception 종류

2. file Handling
1. 파일의 종류
-
text 파일
- 인간도 이해가능한 문자열 형식
- 메모장 열면 확인 가능
- HTML파일, 파이썬 코드 파일
- 바이너리와 같이 똑같이 이진형태로 저장
- 텍스트 파일도 저장할 때는 바이너리 파일로 저장한다.
- bmp파일 만들떄 처럼 파일의 헤더를 설정하면 열떄 texst파일로 보인다.
-
binary 파일
2. 파일의 FILE READ
- "r"
f = open("i_have_a_dream.txt", "r" )
with open("i_have_a_dream.txt", "r") as my_file:
-
그냥 open을 하는 방법과 with를 사용해서 오픈 하는 방법이 있다.
-
with는 한번 사용하면 사라짐. , 그냥 open은 close안하면 안 사라짐
-
readlines : 모든 문자를 가지고 와서 개행 단위로 이중배열에 모든 텍트트를 저장해준다.(gnl과 같음)
-
readline : 한줄씩 문자열만 배열에 저장한다.
-
"w"
f = open("i_have_a_dream.txt", "w", encodong="utf8" )
f = open("i_have_a_dream.txt", "a", encodong="utf8" )
with open("i_have_a_dream.txt", "w",encodong="utf8") as my_file:
-
w는 실행 할떄마다 위에서 다시 쓰는거고, a는 append라 뒤에서 부터 다시씀.
osmodoule
- import os
- 셀 명령어를 파이썬 명령어로 실행할수 있는 모듈
- os.mkdir("newfolder")
- 하면 새로운 폴더를 만들수 있음.
- os.pathh.exists("abc") 파일이 잇는지 확인.
- dest = os.path.join("abc", "hoylee.txt") -> abc\hoylee.txt 이런식으로 경로 지정가능., sorce = "hoylee.txt)
- shutil.copy(sorce, dest) 이런식으로 파일 복사도 가능
pathlib 이 요즘 많이 사용하는 추세이다(33)
log파일 생성하기.
pikle
- 객체(모듈)는 메모리에 저장되어있지만,
- 실행하고 있는 인터프리터가 끝나면 메모리에 저장된 객체도 날라감.
- 인터프리터가 끝나고도, 객체 데이터를 사용하고 싶을떄 pikle을 사용
- 아래 사진은 객체가 실행중일떄 미리 pickle형태로 저장하고, 객체가 닫힌뒤 다시 열었을떄 사용하는 방법
import pickle
f = open("list.pickle", "wb")
test = [1, 2, 3, 4, 5]
pickle.dump(test, f)
f.close()
f = open("list.pickle", "rb")
test_pickle = pickle.load(f)
print(test_pickle)
f.close()
logging handdle
- 게임을 나올때 핵 유저 떄문에 주로 망한다. 이를 해결할 때 log 기록들을 보며 해결하기도 한다.
1. 로그 남기기
- 정보남기기
- 어디에 남길지 정함.(화면, 파일, db 등)
- 실행시점(유저 분석)과 개발시점(디버깅용)에서 남겨야할 기록으로 나뉘어짐,
print vs logging
- 화면에 저장하면 사라짐. db에 저장하길 권장
- 레벨별(개발을 위한 로그, 운영을 위한 로그)로 기록 저장가능
logging 모듈
python 의 기본 모듈
import logging
logging.debug("틀렸잖아!")
logging.info("확인해")
logging.warning("조심해!") : 가장먼저 나옴
logging.error("에러났어!!!")
logging.critical ("망했다...")
- 로깅은 프린터문 처럼 출력할수도 있고, 파일에 저장 시킬수도 있다.
loogin level
- 프로그램 진행에 따라 다른 level의 log 를 출력함.
- DEBUG > INFO > WARNING > ERROR > Critical

지금까지 배운내용들을 실제로 사용하려면, 데이터 파일 위치, 파일 저장장소, operation type 등을 설정해주어야한다.
이러한 설정을 하는 방법은
1. configparser - 파일에
2. argoarser - 실행 시점에
configparser
argoarser
- ls --help
- 파일을 실행할떄, 무엇을 입력하는지, 프린트해서 보여주고 거기에 원하는 입력값을 입력해주는 방식으로 메게변수를 넣어준다.
로깅은굳이 기억할 필요는 없고 콘피그랑 얼그 팔서 만 기억하면 될거 같다.
loogin level 할떄 오랜 시간 학습을 시키는데 슬랙으로 옮기거나, 카카오 톡이나 라인으로도 옮겨두며 개발한다.
Python data handling
강의 소개
이번 강의에서는 파이썬에서 다룰 수 있는 CSV, 웹, XML, JSON 네 가지 데이터 타입에 대해서 배웁니다.
CSV 파일 포맷은 어떠한 프로그래밍 언어든 데이터를 다루는 분야에서 가장 기본이 되는 타입형태입니다. 우리가 계속 써온 데이터 저장형태인 엑셀의 텍스트 데이터 형태로 이해하시면 됩니다. 매우 중요한 데이터 타입으로 파이썬으로 핸들링하는 것에 익숙해지는 것이 필요합니다.
다음으로 웹입니다. 우리 모두가 알고 있듯이 이미 웹은 우리 세상에서 가장 많은 정보를 제공하고 가장 많은 시간을 사용하고 있는 공간입니다.이번 챕터에서 우리는 이 정보를 어떻게 자동으로 확보할 것인지에 대해서 배웁니다. 먼저 기본적인 웹을 표현하는 가장 기본적인 언어인 HTML에 대해서 배웁니다. HTML은 웹에서 나타나는 정보의 표현 방법 중 가장 대표적인 방법으로 거의 모든 정보를 HTML 분석으로 얻을 수가 있습니다. 다음으로 그 HTML을 분석하기 위해 대표적인 방법인 정규표현식(regex)에 대해서 배우게 됩니다. 정규표현식은 텍스트 데이터 분석에 있어 가장 대표적인 분석 방법으로, HTML외에도 다양한 유형의 텍스트에서 특정 정보를 뽑아내는데 사용합니다.
마지막으로 데이터를 저장하는 다양한 포멧중 하나인 XML(eXtensible Markup Languages)과 JSON(JavaScript Object Notation)에 대해서 다루도록 하겠습니다. XML 프로그래밍 언어에서 데이터를 저장하고 불러오는 전통적인 파일포맷은 흔히 레거시 시스템(오래전에 구축된 시스템)에서 raw파일을 저장하는 대표적인 포맷입니다. JSON은 이와 달리 모바일이 활발히 사용되면서 사용되기 시작하는 저장 포맷으로 웹에서 많이 사용되는 JavaScript의 문법을 활용하여 저장하는 포맷입니다.
1. csv(Comma Separate Value)
- CSV, 필드를 쉼표(,)로 구분한 텍스트 파일
- 탭(TSV), 빈칸(SSV) 등으로 구분해서 만들기도 함
- 통칭하여 character-separated values (CSV) 부름
- 엑셀에서는 “다름 이름 저장” 기능으로 사용 가능
1. csv객체로 csv처리
- Text를 , 단위로 끊는데, 문제는 기존 text에 , 가 포함 되어있을수 있음.
- 파이썬에서 이런것들을 처리하기 위해 csv 객체(class)를 제공함.
- data.go.kr 가면 csv 예제를 받아볼수 잇음. (공공데이터들)
사진
윈도우는 cp940 vs 코드는 utf8
2. web(world wide web)
거미줄이다~~~
- 팀버너스리가 1989년 처음제안되었으며, 물리학자들간의 정보교환을 위해 사용됨.
- 데이터 송수신을 윟나 http프로토콜 사용
- 서버에서 데이터를 표시하기 위해 html 언어 만듬
1. 웹 동작 구조

2. HTML(Hyper Text Markup Language)
- 웹 상의 정보를 구조적으로 표현하기 위한 언어
- 제목, 단락, 링크 등 요소 표시를 위해 Tag를 사용
- 모든 요소들은 꺾쇠 괄호 안에 둘러 쌓여 있음 Hello, World #제목 요소, 값은 Hello, World
- 모든 HTML은 트리 모양의 포함관계를 가짐
- 일반적으로 웹 페이지의 HTML 소스파일은 컴퓨터가 다운로드 받은 후 웹 브라우저가 해석/표시
- html 데이터를 다듬는건 정규식을 이용해서!
3. 왜 웹을 알아야 하는가?
4. 정규식 (regular expression)
- 정규 표현식, regexp 또는 regex 등으로 불림
- 복잡한 문자열 패턴을 정의하는 문자 표현 공식, html 코드는 태그형태로 존재하기 떄문에 정규식으로 분리하기 좋음
- 특정한 규칙을 가진 문자열의 집합을 추출
- 이런게 있다...
010-0000-0000 ^\d{3}-\d{4}-\d{4}$
[0-9]{2}:[0-9]{2}
5. 정규식 for HTML Parsing
- 문법 자체는 매우 방대, 스스로 찾아서 하는 공부 필요
6. 정규식 기본 문법 – 메타 문자
정규식 표현을 위해 원래 의미 X, 다른 용도로 사용되는 문자
. ^ $ * + ? { } [ ] \ | ( )
. - 줄바꿈 문자인 \n를 제외한 모든 문자와 매치 a[.]b
- 앞에 있는 글자를 반복해서 나올 수 있음
tomor*ow tomorrow tomoow tomorrrrow
7. 정규식 in 파이썬
- re 모듈을 import 하여 사용 : import re
- 함수: search – 한 개만 찾기, findall – 전체 찾기
- 추출된 패턴은 tuple로 반환됨
- 연습 - 특정 페이지에서 ID만 추출하기 https://bit.ly/3rxQFS4
- ID 패턴: [영문대소문자|숫자] 여러 개, 별표로 끝남
"([A-Za-z0-9]+***)“ 정규식
3. XML
- 데이터의 구조와 의미를 설명하는 TAG(MarkUp)를 사용하여 표시하는 언어(html 처러 tag)
- TAG와 TAG사이에 값이 표시되고,
구조적인 정보를 표현할 수 있음
- HTML과 문법이 비슷, 대표적인 데이터 저장 방식
- XML은 컴퓨터(예: PC ↔ 스마트폰)간에 정보를 주고받기 매우 유용한 저장 방식으로 쓰이고 있음
- xml 데이터를 다듬는건 beautifulsoup 모듈을 통해서!
XML Parsing in Python
- XML도 HTML과 같이 구조적 markup 언어
- 정규표현식으로 Parsing이 가능함
- 그러나 좀 더 손쉬운 도구들이 개발되어 있음
- 가장 많이 쓰이는 parser인 beautifulsoup으로 파싱
가상환경 설치
activate python_mooc
conda install lxml
conda install -c anaconda beautifulsoup
javasccript object Notation.
JSON Overview
- JavaScript Object Notation
- 원래 웹 언어인 Java Script의 데이터 객체 표현 방식
- 간결성으로 기계/인간이 모두 이해하기 편함
- 데이터 용량이 적고, Code로의 전환이 쉬움
- 이로 인해 XML의 대체제로 많이 활용되고 있음
JSON in Python
- json 모듈을 사용하여 손 쉽게 파싱 및 저장 가능
- 데이터 저장 및 읽기는 dict type과 상호 호환 가능
- 웹에서 제공하는 API는 대부분 정보 교환 시 JSON 활용
- 페이스북, 트위터, Github 등 거의 모든 사이트
- 각 사이트 마다 Developer API의 활용법을 찾아 사용