File / Exception / Log Handling
Exception
- 예측 가능한 예외
- 개발 과정 중에 미리 파악할 수 있는 상황들로, 개발자가 코드 내에서 직접 정의하는 예외입니다. 이러한 예외는 예상되는 문제점이나 특정 조건들에 대응하기 위해 사전에 명시적으로 설정됩니다.
- 예상 불가능한 예외
- 주로 개발자의 실수에서 비롯되며, 이들은 프로그램 실행 과정에서 인터프리터에 의해 감지됩니다. 이 경우, 인터프리터는 에러를 발생시키고 프로그램을 종료시키지만, 이러한 예외들은 Exception Handling을 통해 적절히 관리할 수 있습니다.
- 예외 처리 구문 (try-except)
try:
예외 발생 가능한 코드
except <Exception Type>:
예외 발생했을 때 대응하는 코드
- Built-in Exception (기본적으로 제공하는 예외)
| IndexError | List의 Index 범위를 넘어갈 때 |
| NameError | 존재하지 않는 변수를 호출할 때 |
| ZeroDivisionError | 0으로 숫자를 나눌 때 |
| ValueError | 변환할 수 없는 문자/숫자를 변환할 때 |
| FileNotFoundError | 존재하지 않는 파일을 호출할 때 |
File Handling
기본적으로 파일은 텍스트 파일과 바이너리 파일의 두 가지 주요 유형으로 분류됩니다.
- 텍스트 파일: 이는 문자들로 구성되며, 일반적으로 사람이 읽을 수 있는 형태로 저장됩니다. ASCII나 Unicode와 같은 문자 인코딩 체계를 사용하여 문자 데이터를 저장합니다. 예를 들어, .txt, .html 또는 소스 코드 파일들이 텍스트 파일의 예입니다.
- 바이너리 파일: 이 유형의 파일은 텍스트 형식이 아닌 데이터를 저장하는 데 사용됩니다. 이미지, 오디오, 비디오 파일 등이 바이너리 파일에 속합니다. 이들은 일반 텍스트 편집기로 열었을 때 사람이 읽을 수 없는 형태로 나타납니다.
| 바이너리 파일 | 텍스트 파일 |
| 이진법 형식으로 저장 | 문자열 형식으로 저장 |
| 메모장으로 열면 내용 확인 불가 | 메모장으로 열면 내용 확인 가능 |
| 엑셀파일, 워드 파일 등 | 메모장에 저장된 파일, HTML 파일, py 파일 등 |
# read
f = open("파일명", "r") #접근모드는 r(읽기), w(쓰기), a(추가)
f.close()
with open("파일명","r") as f:
contents = f.read()
print(contents)
# f.close()가 없음
with open("파일명","r") as f:
contents_list = f.readlines()
# 파일 전체를 list로 반환,실행 시 마다 한 줄 씩 읽어옴, 메모리가 적게 쓰고 싶으면 readline()
# write - 파일을 새로 열기
f = open("파일명", "w", encoding='utf8') # encoding: 저장 표준
for i in range(1, 11):
data = "%d번째 줄입니다.\n" % i
f.write(data)
f.close()
# append - 기존 파일에 덮어쓰기
with open("파일명", mode="a", encoding="utf8") as f:
for i in range(1, 11):
data = f'{i}번째 줄입니다.\n'
f.write(data)
# os 모듈의 사용하여 디렉토리 다루기
import os
os.mkdir("log")
# 디렉토리 있는지 확인
if not os.path.isdir("log"):
os.mkdir("log")
# 최근에는 pathlib 모듈을 사용하여 path를 객체로 다룸
import pathlib
cwd = pathlib.Path.cwd()
cwd.parent
cwd.glob("*")
Pickle
파이썬에서 제공하는 내장 라이브러리로, 객체 직렬화(object serialization) 과정을 담당합니다. 이를 통해 파이썬의 다양한 객체들을 파일에 저장하고 나중에 다시 불러올 수 있게 해줍니다.
import pickle
f = open('list.pickle', 'wb') # b : binary
test = [1, 2, 3, 4, 5]
pickle.dump(test, f)
f.close()
del test
f = open('list.pickle', 'rb')
test_pickle = pickle.load(f)
test_pickle # [1,2,3,4,5]
f.close()
Logging Handling
Logging은 프로그램 실행 중 발생하는 다양한 이벤트와 정보를 기록하는 과정을 말합니다. 이는 프로그램의 실행 경로, 오류 메시지, 사용자의 행동 등 중요한 정보를 포함할 수 있습니다. 로그는 프로그램의 성능 분석, 오류 진단, 보안 모니터링 등에 필수적인 요소로 사용됩니다.
로깅의 주요 내용
- 사용자 접근: 사용자가 시스템에 언제 어떻게 접근했는지에 대한 정보.
- 예외 및 오류: 프로그램 실행 중 발생하는 오류와 예외 상황.
- 함수 호출과 작업: 특정 함수의 호출 또는 특정 작업의 실행 과정과 결과.
로그 기록 방법
- 콘솔 출력: 개발 중 디버깅을 위해 자주 사용되나, 분석에는 적합하지 않습니다.
- 파일 기록: 로그를 파일 형태로 저장하여 분석과 장기적인 모니터링에 유용합니다.
- 데이터베이스 저장: 로그 데이터를 데이터베이스에 저장하여 구조화된 형태로 관리하고, 쿼리를 통한 분석이 가능합니다.
| debug | 개발시 처리 기록을 남겨야하는 로그 정보를 남김 | 다음함수로 A를 호출함, 변수 A를 B로 변경함 |
| info | 처리가 진행되는 동안의 정보를 알림 | 서버 시작됨, 서버 종료됨, 사용자 A가 접속함 |
| warning | 사용자가 잘못 입력한 정보나 처리는 가능하나 원래 개발시 의도치 않은 정보가 들어왔을 때 알림 | Str 입력을 받아야 하는데, Int가 입력됨- str casting으로 처리, 함수에 이차원 리스트 대신 일차원 리스트가 입력됨.- 이차원으로 변환 후 처리 |
| error | 잘못된 처리로 인해 에러가 났으나, 프로그램은 동작 가능 | 파일에 기록을 해야하는데 파일이 없음 - Exception 처리후 사용자에게 알림, 외부서비스와 연결 불가 |
| critical | 잘못된 처리로 데이터 손실이나 더이상 프로그램 동작 불가 | 잘못된 접근으로 해당 파일이 삭제됨, 사용자에 의한 강제 종료 |
파이썬의 로깅 모듈
파이썬에서는 logging 모듈을 통해 로그를 쉽게 관리할 수 있습니다. 이 모듈을 사용하면 로그의 수준(Level), 형식(Format), 대상(Destination) 등을 쉽게 설정할 수 있으며, 기록된 로그를 통해 프로그램의 동작을 파악하고 문제를 진단하는 데 도움을 줍니다.
Python data handling
CSV
CSV (Comma Separated Values) 파일은 데이터를 쉼표(,)로 구분하여 저장하는 텍스트 파일 형식입니다. 이 형식은 엑셀 스프레드시트와 유사한 구조의 데이터를 프로그램에 관계없이 교환하고 사용하기 위해 널리 사용됩니다.
import csv
reader = csv.reader(f, delimiter=',', quotechar='"', quoting=csv.QUOTE_ALL)
| Attribute | Default | Mean |
| delimiter | , | 글자를 나누는 기준 |
| lineterminator | \r\n | 줄 바꿈 기준 |
| quotechar | " | 문자열을 둘러싸는 신호 문자 |
| quoting | QUOTE_MINIMAL | 데이터 나누는 기준이 quotechar에 의해 둘러싸인 레벨 |
Web (World Wide Web)
HTML (Hyper Text Markup Language)
- 목적: 웹 상의 정보를 구조적으로 표현하기 위한 언어입니다.
- 특징: 제목, 단락, 링크 등 다양한 웹 페이지 요소를 태그(tag)를 사용하여 표시합니다.
- 구조: 모든 HTML 요소들은 꺾쇠괄호(<, >)로 둘러싸여 있으며, 트리 형태의 구조를 가집니다.
- 웹 브라우저 처리: 웹 브라우저는 컴퓨터가 다운로드한 HTML 소스 파일을 해석하여 사용자에게 표시합니다.
정규식 (Regular Expression)
- 정의: 문자열 패턴을 정의하는 데 사용되는 표현 방식입니다. regexp 또는 regex로도 불립니다.
- 용도: 특정 규칙을 가진 문자열의 집합을 추출하는 데 주로 사용됩니다.
- HTML과의 연관성: HTML은 태그를 사용한 일정한 형식이 있기 때문에 정규식을 사용하여 특정 요소를 추출하는 데 유용합니다.
- 파이썬에서의 사용: 파이썬에서는 re 모듈을 import하여 정규식 기능을 사용할 수 있습니다.
메타문자
- 정의: 정규식에서 특별한 의미를 가지며 다른 용도로 사용되는 문자들입니다.
- 예시: 메타문자에는 ., ^, $, *, +, ?, {}, [], \, |, () 등이 있습니다.
XML(eXtensible Markup Languages)
XML (eXtensible Markup Language)은 데이터의 구조와 의미를 설명하는 태그(tag)를 사용하여 표현하는 마크업 언어입니다. HTML과 문법적으로 유사하지만, XML은 데이터의 저장과 전송에 특화되어 있으며, HTML보다 훨씬 유연합니다.
XML의 특징
- 태그 사용: 태그와 태그 사이에 값이 표시되며, 구조적인 정보를 표현할 수 있습니다.
- 메타정보: 스키마와 DTD (Document Type Definition)를 사용하여 데이터 구조에 대한 메타정보를 정의합니다.
- 용도: 다양한 형태로 변경이 가능하여, 컴퓨터나 장치 간 정보 교환에 매우 유용합니다.
XML의 활용
- 데이터 교환: 다른 시스템(예: PC와 스마트폰) 간에 정보를 교환하는 데 자주 사용됩니다.
- 데이터 저장: 구조적인 데이터를 저장하는 데 적합한 방식입니다.
파이썬에서의 XML 처리
- 구조적 마크업 언어: XML은 HTML과 같이 구조적인 마크업 언어입니다.
- 파싱 도구: 정규표현식을 사용하여 파싱할 수 있지만, 파이썬에서는 beautifulsoup와 같은 더 편리한 파싱 도구가 널리 사용됩니다.
- BeautifulSoup 사용: beautifulsoup은 XML 파싱에 있어서 가장 많이 사용되는 도구 중 하나입니다. 이를 사용하면 XML 문서를 쉽게 파싱하고 처리할 수 있습니다.
from bs4 import BeautifulSoup
# 객체 생성
soup = BeautifulSoup(books_xml, "lxml")
# Tag 찾는 함수
soup.find_all("author") # 정규식과 마찬가지로 해당 패턴을 모두 반환
soup.get_text() # 반환된 패턴의 값 반환 (태그와 태그 사이)
JSON(JavaScript Object Notation)
JSON (JavaScript Object Notation)은 자바스크립트에서 객체를 표현하는 방식으로, 간결성 덕분에 인간과 기계 모두에게 이해하기 쉬운 데이터 포맷입니다. 데이터의 용량이 상대적으로 작고 코드로의 전환이 용이하며, 이러한 이유로 XML의 대체제로 널리 사용되고 있습니다. JSON의 구조는 파이썬의 딕셔너리(Dictionary) 형태와 유사하여 파이썬 개발자들에게 친숙합니다.
파이썬에서의 JSON 활용
- json 모듈: 파이썬은 내장된 json 모듈을 통해 JSON 데이터를 쉽게 파싱하고 저장할 수 있습니다.
- 데이터 처리: 파이썬의 딕셔너리 타입과 JSON은 서로 호환되기 때문에, JSON 데이터를 딕셔너리로 변환하거나 그 반대로 변환하는 것이 매우 간단합니다.
- API 통신: 페이스북, 트위터, GitHub 등 대부분의 웹사이트가 제공하는 API는 JSON 형식을 사용하여 데이터를 교환합니다. 개발자들은 각 사이트의 개발자 API 문서를 참조하여 필요한 데이터를 추출하고 활용할 수 있습니다.
import json
# JSON 파일의 구조 확인 후 읽어옴 -> Dict type처럼 처리
with open("파일명.json", "r", encoding="utf8") as f:
contents = f.read()
json_data = json.loads(contents)
# Dict type으로 데이터 저장 -> json 모듈로 write
with open("파일명.json", "w") as f:
json.dump(데이터명, f)'Naver Boostcamp AI Tech > Level 1' 카테고리의 다른 글
| < Boostcamp > Optimization (0) | 2023.12.27 |
|---|---|
| < Boostcamp > Numpy / Pandas (0) | 2023.12.27 |
| < Boostcamp > 딥러닝 기초 (0) | 2023.12.27 |
| < Boostcamp > AI Math 3 (0) | 2023.12.27 |
| < Boostcamp > AI Math 2 (0) | 2023.12.27 |