[부스트캠프 AI Tech 3기 Pre-Course] File / Exception / Log Handling

ossap·2021년 11월 30일
0

Part 3. Python Basics for AI
chapter 3) Exception / File / Log Handling


네이버 AI 부스트캠프의 Pre-course 수업을 듣던 중 공부한 내용을 정리하고, 추가적으로 따로 공부한 부분이 생기면 함께 필기했습니다.

대부분의 캡쳐, 정보는 부스트캠프 강의에서 얻었으며 오직 개인 공부의 목적으로 포스팅합니다.

강의 링크는 여기에

1. Exception Handling

Try~except 문법

  • 사용자가 잘못 입력해서 에러가 나는 경우, 로직에 의해 에러가 날 수 있다면 if~else를 쓰는 것이 가독성이나 여러 면에서 나음

<기본 형식>

try: 
	예외 발생 가능 코드
except <Exception Type>:
	예외 발생시 대응하는 코드

<밑에 추가적으로 적을 수 있는 코드들>

else: 
	예외가 발생하지 않을 때 동작하는 코드
finally:
	예외 발생 여부와 상관없이 실행됨

Built-in Exception Type: 기본적으로 제공하는 예외
1) IndexError : List의 Index 범위를 넘어갈 때
2) NameError : 존재하지 않은 변수를 호출할 때
3) ZeroDivisionError : 0으로 숫자를 나눌 때
4) ValueError : 변환할 수 없는 문자/숫자를 변환할 때
5) FileNotFoundError : 존재하지 않는 파일을 호출할 때

raise 구문

  • 필요에 따라 강제로 Exception을 발생

<기본 형식>

raise <Exception Type>(예외정보)

<예제>

while True:
    value = input("변환할 정수값 입력")
        for digit in value:
            if digit not in "0123456789":
                raise ValueError("숫자값을 입력하지 않으셨습니다")
        print("정수값으로 변환된 숫자 -", int(value))

assert 구문

  • 특정 조건에 만족하지 않을 경우 예외 발생

<기본 형식>

assert 예외조건

<예제>

def get_binary_nmubmer(decimal_number):
    assert isinstance(decimal_number, int)
    return bin(decimal_number)
print(get_binary_nmubmer(10)

2. File Handling

Binary 파일 / Text 파일

  1. Binary : 이진법 형식으로 저장, 컴퓨터만 이해 가능 (ex : 엑셀파일, 워드 파일처럼 메모장에서 열었을때 외계어로 나오는 파일.)
  2. Text : 문자열 형식으로 저장, 인간도 이해 가능 (ex: 메모장에 저장된 파일, Html 파일, 파이썬 코드파일 등)
    > 모든 텍스트 파일도 실제로는 binary 파일, ASCII/Unicode 문자열 집합으로 저장되어 사람이 읽을 수 있음.

파이썬에서 파일 열기, 읽기

  1. 파일을 읽어올 주소를 먼저 연결(경로 지정).
    > 폴더에서 파일을 찾아 여는것과 같다고 생각하면 됨.
    > 열기 : open(), 닫기 : close()
f = open("<파일이름>", "접근모드")
f.close()
  • 접근 모드 종류
    1) r : 읽기모드
    2) w : 쓰기모드
    3) a : 추가모드 (append의 줄임말. 파일의 마지막에 새로운 내용을 추가)
  1. 파일 읽기
  • read() : txt파일 안에 있는 내용을 문자열로 반환 (대상 파일이 같은 폴더에 있을 경우)
f = open("i_have_a_dream.txt", "r")
contents = f.read()
print(contents)
f.close()
  • with 구문과 함께 사용하기
    > with가 들여쓰기 된부분은 다 열려있다. 그러나 강사님은 with보다 위처럼 f.open, f.close가 깔끔해서 더 추구하심.
with open("i_have_a_dream.txt", "r") as my_file:
    contents = f.read()
    print(type(contents), contents)
  • 실행시마다 한 줄 씩 읽어 오기 (with 사용)
with open("i_have_a_dream.txt", "r") as my_file:
    i = 0
    while True:
        line = my_file.readline() #한 줄씩 읽기
        if not line:
            break
        print(str(i) + " === " + line.replace("\n",""))
        i = i + 1

파이썬의 directory 다루기

디렉토리 확인 : os 모듈을 사용

import os
os.mkdir("log") # make directory

1) os.path.isdir("폴더이름")

<예제>

if not os.path.isdir("log"):
#"log"라는 경로가 없으면:
    os.mkdir("log") 
    #"log"파일을 만들어라

2) os.path.exists("파일이름")
True/False 반환으로 알려줌

<예제>
(1) 디렉토리 존재 여부, 파일 존재 여부 확인 후

if not os.path.exists("log"/count_log.txt"):
    f = open("log/count_log.txt", 'w', encoding="utf8")
    f.write("기록이 시작됩니다\n")
    f.close()

(2) 그리고 생성 시작

with open("log/count_log.txt", 'a', encoding = "utf8") as f:
    import random, datetime
    for i in range(1,11):
        stamp = str(datetime.datetime.now())
        value = random.random() * 1000000
        log_line = stamp + "\t" + str(value) + "값이 생성되었습니다" + "\n"
        f.write(log_line)

3) os.path.isfile("file.ipynb") 등 다양한 방법이 있음.

경로를 적을 때 (OS에 따라 경로명이 조금씩 달라질 때 에러남을 방지)

  1. os.path.join("foldername","file.txt")
  2. shutil 함수
  3. 가장 최근! pathlib 모듈을 사용해 path를 객체로 다룸
import pathlib
cwb = pathlib.Path.cwd()
cwb.parent 
#'폴더1\폴더2\파일1'일때 파일1은빼고 '폴더1\폴더2'까지의 경로를 보여줌.
cwb.parent.parents 
#'폴더1'  뒤의 폴더2의 부모니까 폴더1까지만.

Pickle

  • 파이썬의 객체를 영속화(persistence)하는 built-in 객체
  • 데이터, object 등 실행 중 정보를 저장 -> 불러와서 사용
  • 저장해야 하는 정보, 계산 결과(모델) 등에 활용

<예제>

import pickle

f = open("list.pickle", "wb") 
# 'wb' = write binary, 파일로 만듦
test = [1, 2, 3, 4, 5]
pickle dump(test,f)
f.close()

del test 
# 메모리 안에 test파일 지우기. test 쳐서 불러도 안나옴


f = open("list.pickle", "rb")
# 'rb' = read binary
test_pickle = pickle.load(f)
print(test_pickle)
f.close()

3. Logging Handling

Logging Module

Python의 기본 Log 관리 모듈
1. 기본적인 Logging 방법

  • 화면이 아니라 my.log 라는 파일에 출력하겠다.
import logging

steam_handler = logging.FileHandler(
	"my.log", mode="a", encoding="utf8")
logger.addHandler(steam_handler)

실제 프로그램을 실행할 땐 여러 설정이 필요한데(데이터 파일 위치, 저장 위치 등) 이러한 정보를 설정해 줄 방법에는 크게 2가지가 있다.

  1. configparser - 파일에
  • 프로그램의 실행 설정을 file에 저장함
  • Section, Key, Value 값의 형태로 설정된 설정 파일을 사용
  • 설정 파일을 Dict Type으로 호출 후 사용
  1. argparser - 실행 시점에
  • Console 창에서 프로그램 실행시 설정 정보를 저장함
  • 거의 모든 Console 기반 Python 프로그램 기본으로 제공
  • 특수 모듈도 많이 존재하지만(TF), 일반적으로 argparse를 사용
  • Command-Line Option 이라고 부름

pickle, config parser, arg parser 추가 공부할 것.

profile
오삽 : 오늘도 삽질

0개의 댓글