now is better than never
[인공지능(AI) 기초 다지기] 2. 파이썬 다지기 (3) 본문
5. 파이썬으로 데이터 다루기
- Exception
- 예상 가능한 예외 -> IF문 처리
- 발생여부를 사전에 인지할 수 있는 예외
- 개발자가 반드시 명시적으로 정의해야 함
- 사용자의 잘못된 입력, 파일 호출 시 파일 없음
- 예상 불가능한 예외 -> Exception Handling
- 인터프리터 과정에서 발생하는 예외, 개발자 실수
- 수행 불가 시 인터프리터가 자동 호출
- 리스트의 범위를 넘어가는 값 호출, 정수 0으로 나눔
- Exception Handling
try:
예외 발생 가능 코드
except <Exception Type>:
예외 발생 시 대응하는 코드
except Exception as e: # 맨 마지막에 발생 가능한 모든 예외 처리하는 코드 -> 권장하지 않음
print(e)
else:
예외가 발생하지 않을 때 동작하는 코드
finally:
예외 발생 여부와 상관없이 실행되는 코드
- try = if / else = except 비슷
- 에러로 인한 시스템 종료를 방지 -> 안정적으로 프로그램 실행
- Built-in Exception : 기본적으로 제공하는 예외
Exception 명 | 내용 |
IndexError | List의 Index 범위를 넘어갈 때 |
NameError | 존재하지 않는 변수를 호출할 때 |
ZeroDivisionError | 0으로 숫자를 나눌 때 |
ValueError | 변환할 수 없는 문자/숫자를 변환할 때 |
FileNotFoundError | 존재하지 않는 파일을 호출할 때 |
- IF문 : 로직 처리
Exception : 에러 발생(사용자의 잘못된 입력 등) 처리
- 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_number(decimal_number):
assert isinstance(decimal_number, int) # True / False 반환 -> False면 에러 발생
return bin(decimal_number)
print(get_binary_number(10))
- File Handling
- file system: OS에서 파일을 저장하는 트리구조 저장 체계
Binary 파일 | Text 파일 |
컴퓨터만 이해할 수 있는 형태인 이진형식으로 저장된 파일 | 인간도 이해할 수 있는 형태인 문자열 형식으로 저장된 파일 |
일반적으로 메모장으로 열면 내용이 깨짐 | 메모장으로 내용 확인 가능 |
엑셀파일, 워드 파일 | 메모장 파일, HTML 파일, 파이썬 코드 파일 |
- 컴퓨터는 text 파일을 처리하기 위해 binary 파일로 변환시킴
- 모든 text 파일도 실제는 binary 파일, ASCII/Unicode 문자열 집합으로 저장되어 사람이 이해할 수 있음
- Python File I/O
f = open("경로/<파일이름>", "접근모드")
f.close()
f = open("text.txt", "r") # 대상 파일이 같은 폴더에 있는 경우 = 상대 경로
contents = f.read()
print(contents)
f.close()
with open("text.txt", "r") as my_file:
contents = my_file.read()
print(type(contents), contents)
접근 모드 | 설명 |
r | 읽기 모드 - 파일을 읽기만 할 때 |
w | 쓰기 모드 - 파일에 내용을 쓸 때 |
a | 추가 모드 - 파일의 마지막에 새로운 내용을 추가 |
- read() : txt 파일 안에 있는 내용을 문자열로 반환
- with 구문 : 들여쓰기 된 구문 안에서만 변수가 사용되고 구문이 끝나면 close 됨
- .readlines() : 줄로 구분하여 파일 전체를 list로 반환
# 실행 시 마다 한 줄 씩 읽어오기
# 너무 대용량이라 한꺼번에 파일을 읽어오기 오래걸리거나 메모리가 부족할 때
with open("text.txt", "r") as my_file:
i = 0
while True:
line = my_file.readline()
if not line:
break
print(str(i) + "===" + line.replace("\n", "")) # 한 줄 씩 값 출력
i += 1
# 단어 통계 정보 산출
- OS module
# row 폴더 생성
import os
os.mkdir("폴더명")
# 폴더 확인
os.path.exists("폴더명")
os.path.isdir("폴더명")
- Log 파일 생성하기
- 디렉토리가 있는지 확인
- 파일이 있는지 확인
없으면 'w' 있으면 'a'
import os
if not os.path.isdir("log"):
os.mkdir("log")
if not os.path.exists("log/count_log.txt"):
f = open("log/count_log.txt", 'w', encoding="utf8")
f.write("기록이 시작됩니다\n")
f.close()
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)
- Pickle
- 파이썬의 객체를 영속화(persistence)하는 built-in 객체
객체는 원래 메모리에 있어야 함 -> 원래 종료 후에는 메모리에서 사라지는 객체를 영속화 - 데이터, object 등 실행 중 정보를 저장하고 불러와서 사용
- 저장해야하는 정보, 계산 결과(모델) 등 활용이 많음
- 파이썬에 특화된 binary file : 접근모드+"b" ("wb", "rb")
- 영속화 : 파이썬에서 쓰는 하나의 객체(리스트, 클래스 등)을 파일로 저장
- Logging Handling
- logging (로그 남기기)
- 프로그램이 실행되는 동안 일어나는 정보를 기록하기
- 무엇을?
유저의 접근, 프로그램의 Exception, 특정 함수 사용 등 - 어디에?
Console 화면에 출력, 파일에 남기기, DB에 남기기 등 - 기록된 로그를 분석하여 의미있는 결과를 도출할 수 있음
- 실행시점에서 남겨야 하는 기록, 개발시점에서 남겨야 하는 기록(에러)
- print vs logging
- 기록을 print로 남기는 것도 가능
- 그러나 console 창에만 남기는 기록은 분석 시 사용 불가
- 모듈별 / 레벨별(개발, 운영)로 기록을 남길 필요
- logging level
- 프로그램 진행 상황에 따라 다른 level의 log 출력
- 개발 시점, 운영 시점마다 다른 log가 남을 수 있도록 지원
- DEBUG > INFO > WARNING > ERROR > CRITICAL
개발 > 운영 > 사용자 - log 관리시 가장 기본이 되는 설정 정보
Level | 개요 | 예시 |
debug | 개발 시 처리 기록을 남겨야 하는 로그 정보 | 다음 함수로 A 호출 변수 A를 B로 변경 |
info | 처리가 진행되는 동안의 정보 | 서버 시작 서버 종료 사용자 A가 프로그램 접속 |
warning | 사용자가 잘못 입력한 정보 처리는 가능하나 원래 의도와 다른 정보 |
str 입력을 해야 하는 곳에 int 입력 -> str casting 이차원 리스트에 일차원 리스트 -> 차원 변환 |
error | 잘못된 처리로 인한 에러지만 프로그램 동작 가능 | 파일 없음 -> Excepton 처리 후 사용자에게 알림 외부서비스 연결 불가 |
critical | 잘못된 처리로 데이터 손실이나 프로그램 동작 불가능 | 잘못된 접근으로 파일 삭제 사용자에 의한 강제 종료 |
- Configparser
- 프로그램 실행 설정(log)를 file에 저장
- Section, Key, Value 값의 형태로 설정된 설정 파일을 사용
- 설정파일을 Dict Type으로 호출 후 사용
- 섹션 - []
속성 - key : value / key = value
# configparser file - example.cfg
'''
[SectionOne]
Status: Single
Name: Derek
Value: Yes
Age: 30
Single: True
[SectionTwo]
FavoriteColor = Green
[SectionThree]
FamilyName: Johnson
'''
import configparser
config = configparser.ConfigParser()
config.sections()
config.read('example.cfg')
config.sections()
for key in config['SectionOne']:
print(key)
config['SectionOne']["status"]
# key value 쌍
for key in config['SectionTwo']:
value = config['SectionTwo'][key]
print("{0} : {1}".format(key, value))
- Argparser
- Console 창에서 프로그램 실행 시 setting 정보를 저장
- 거의 모든 Console 기반 python 프로그램 기본으로 제공
- 특수 모듈도 많이 존재하지만(TF), 일반적으로 argparser를 사용
- Command-Line Option 이라고 부름
- (argument를 사전에 입력하면서 사용사가 실험을 할 수 있게 함)
import argparse
parser = argparse.ArgumentParser(description='Sum two integers.')
parser.add_argument('-a', "--a_value", dest=”A_value", help="A integers", type=int)
parser.add_argument('-b', "--b_value", dest=”B_value", help="B integers", type=int)
args = parser.parse_args()
print(args)
print(args.a)
print(args.b)
print(args.a + args.b)
- Logging formatter
- Log이 결과값의 format을 지정해줄 수 있음
import logging
formatter = logging.Formatter('%(asctime)s %(levelname)s %(process)d %(message)s')
# log config file
logging.config.fileConfig('logging.conf')
logger = logging.getLogger()
'Python > [코칭스터디 9기] 인공지능 AI 기초 다지기' 카테고리의 다른 글
[인공지능(AI) 기초 다지기] 3. 기초 수학 첫걸음 (1) (0) | 2023.02.01 |
---|---|
[인공지능(AI) 기초 다지기] 2. 파이썬 다지기 (4) (0) | 2023.01.30 |
[인공지능(AI) 기초 다지기] 2. 파이썬 다지기 (2) (0) | 2023.01.27 |
[인공지능(AI) 기초 다지기] 2. 파이썬 다지기 (1) (0) | 2023.01.26 |
[인공지능(AI) 기초 다지기] 1. 파이썬 기초 (4) (0) | 2023.01.17 |