Search
Duplicate

File / Exception / Log Handling

생성일
2023/02/16 14:40
태그

File / Exception / Log Handling

실습했던 Link

File Handling

File

text 파일
인간도 이해할 수 있는 형태인 문자열 형식으로 저장된 파일
메모장으로 열면 내용 확인 가능
메모장에 저장된 파일, HTML 파일, 파이썬 코드 파일 등
binary 파일
컴퓨터만 이해할 수 있는 형태인 이진법 형식으로 저장된 파일
일반적으로 메모장으로 열면 내용이 깨져 보임 (메모장 해설 불가)
엑셀 파일, 워드 파일 등등

Python File I/O

파이썬은 파일처리를 위해 “open” 키워드를 사용함
f = open("<파일이름>", "접근 모드") f.close() # r 읽기모드 # w 쓰기모드 # a 추가모드 - 파일의 마지막에 새로운 내용을 추가시킬 때 사용
Python
복사
with open("i_have_a.txt", "r") as f:
Python
복사
with open("ashisland.txt", "r") as my_file: content_list = my_file.readlines() print(type(content_list)) print(content_list)
Python
복사
실행 시 마다 한줄 씩 읽어오기
readline() 쓰면 된다
line = my_file.readline()
Python
복사
with open("ashisland.txt", "r") as my_file: i = 0 while True: line = my_file.readline() if i == 5: break print("{0} ==== {1}".format(i, line)) i += 1 line
Python
복사
File read
# 더 깔끔 f = open("dfsd.txt", "r"). # 대상 파일이 같은 폴더에 있을 경우 contents = f.read() print(contents) f.close()
Python
복사
with open("ashisland.txt", "r") as my_file: contents = my_file.read() print(type(contents), contents)
Python
복사
File write
mode는 “w”
encoding=”utf8”
f = open("count_log.txt", 'w', encoding="utf8") f.write(data) f.close()
Python
복사

파이썬의 directory 다루기

os 모듈을 사용하여 Directory 다루기
import os os.mkdir("log")
Python
복사
디렉토리가 있는지 확인하기
try: os.mkdir("abc") except FileExistsError as e: print("Alreaddy created")
Python
복사
os.path.exists("abc") os.path.isfile("file.ipynb")
Python
복사

shutil() 함수

→ shutil.copy
파일 복사 함수
import shutil source = "ashisland.txt" dest = os.path.join("abc", "island.txt") dest
Python
복사
최근에는 pathlib 모듈을 사용하여 path를 객체로 다룸
import pathlib pathlib.Path.cwd()
Python
복사
import pathlib cwd = pathlib.Path.cwd() cwd.parent cwd.parent.parent list(cwd.glob("*"))
Python
복사

Pickle

파이썬의 객체를 영속화(persistence) 하는 built-in 객체
데이터, object 등 실행 중 정보를 저장 → 불러와서 사용
저장해야하는 정보, 계산 결과(모델) 등 활용이 많음
영속화 - 파이썬에서 사용하는 하나의 객체를 파일로 저장해서 쓰는 것
import pickle f = open("list.pickle", "wb") test = [1,2,3,4,5] pickle.dump(test, f) f.close()
Python
복사
del test # 삭제하여도
Python
복사
f = open("list.pickle", "rb") test_pickle = pickle.load(f) test_pickle f.close() # 복원 가능
Python
복사

Exception Handling

→ 예외가 발생할 경우, 후속 조치 등 대처 필요
try ~ except 문법
try: 예외 발생 가능 코드 except <Exception Type>: 예외 발생 시 대응하는 코드
Python
복사
a = [1, 2, 3, 4, 5] for i in range(10): try: print(i, 10 // i) except ZeroDivisionError: #builtIn error -> 이미 내장된 에러 print("Error") print("Not divided by 0")
Python
복사
Built-in Exception : 기본적으로 제공하는 예외
Exception 이름
내용
IndexError
List의 Index 범위를 넘어갈 때
NameError
존재하지 않은 변수를 호출 할 때ㅔ
ZeroDivisionError
0으로 숫자를 나눌 때
ValueError
변환할 수 없는 문자/숫자를 변환할 때
FileNotFoundError
존재하지 않는 파일을 호출 할 때
try ~ except ~ else
try ~ except ~ finally
raise 구문
필요에 따라 강제로 Exception을 발생
raise <Exception Type> (예외정보)
Python
복사
assert 구문
특정 조건에 만족하지 않을 경우 예외 발생
assert 예외조건
Python
복사

Logging Handling

로그 남기기 - Logging

프로그램이 실행되는 동안 일어나는 정보를 기록을 남기기
유저의 접근, 프로그램의 Exception, 특정 함수의 사용
Console 화면에 출력, 파일에 남기기, DB에 남기기 등
기록된 로그를 분석하여 의미있는 결과를 도출 할 수 있음
실행시점에서 남겨야 하는 기록, 개발시점에서 남겨야하는 기록

print vs logging

기록을 print로 남기는 것도 가능함
그러나 Console 창에만 남기는 기록은 분석시 사용불가
때로는 레벨별(개발, 운영)로 기록을 남길 필요도 있음
모듈별로 별도의 logging을 남길 필요도 있음
이러한 기능을 체계적으로 지원하는 모듈이 필요함

파이썬의 로그 모듈

import logging
Python
복사
logging.debug("틀렸잖아!") logging.info("롹인해") logging.warning("조심해!") logging.error("에러났어!!!") logging.critical("망했다...")
Python
복사

logging level

프로그램 진행 상황에 따라 다른 level의 Log를 출력함
개발 시점, 운영 시점 마다 다른 Log가 남을 수 있도록 지원함
DEBUG > INFO > WARNING > ERROR > Critical
Log 관리시 가장 기본이 되는 설정 정보
debug
개발시 처리 기록을 남겨야하는 로그 정보를 남김
info
처리가 진행되는 동안의 정보를 알림
warning
사용자가 잘못 입력한 정보나 처리는 가능하나 원래 개발시 의도치 않는 정보가 들어왔을 때 알림
error
잘못된 처리로 인해 에러가 났응나, 프로그램은 동작할 수 있음을 알림
critical
잘못된 처리로 데이터 손실이나 더이상 프로그램이 동작할 수 없음을 알림
if __name__ == '__main__': logger = logging.getLogger("main") logging.basicConfig(level=logging.DEBUG) logger.debug("틀렸어!!") logger.info("확인해!") logger.warning("조심해!") logger.error("에러났어!") logger.critical("망했다!")
Python
복사

configparser

프로그램의 실행 설정을 file에 저장함
Section, Key, Value 값의 형태로 설정된 설정 파일을 사용
설정파일을 Dict Type으로 호출 후 사용

argparser

Console 창에서 프로그램 실행시 Setting 정보를 저장함
거의 모든 Console 기반 Python 프로그램 기본으로 제공
특수 모듈도 많이 존재하지만(TF), 일반적으로 argparse 를 사용
Command-Line Option 이라고 부름

Logging formmater

Log의 결과값의 format을 지정해줄 수 있음
formatter = logging.Formatter('%(asctime)s %(levelname)s %(process)d %(message)s')
Python
복사