File Handling

Hyunwoo Lee·2022년 3월 14일
0

File Handling

File System: OS에서 파일을 저장하는 트리구조 저장체계

텍스트 파일 읽기

파일 통으로 읽기

f = opne("file_name.txt", "r")
contents = f.read()
print(contents)
f.close()

라인별로 읽기 1

with open("untitled.txt",'r', encoding='UTF8') as f:
    contents = f.read()
print(contents)
print("----")
print(contents.split("\n")[1])

라인별로 읽기 2

with open("untitled.txt",'r', encoding='UTF8') as f:
    content_list = f.readlines()
    print(content_list[1])

with를 이용하면 인덴트 영역 안에서만 사용가능하다. f.close 없어도 된다.

1번에 1줄만 읽기

with open("untitled.txt",'r', encoding='UTF8') as f:
    while True:
        line = f.readline()
        if not line:
            break
        print(line)

파일 쓰기

write 모드로 쓰기

f = open("write.txt", 'w', encoding='utf8')
for i in range(1, 11):
    data = "{0} 번째 줄입니다.\n".format(i)
    f.write(data)
f.close()

append 모드로 쓰기

f = open("write.txt", 'a', encoding='utf8')
for i in range(11, 21):
    data = "{0} 번째 줄입니다.\n".format(i)
    f.write(data)
f.close()

directory 다루기

디렉토리 생성

import os
os.mkdir("log")

"log" 폴더가 생성된다.

이미 존재하는 디렉토리 예외처리

try:
    os.mkdir("log")
except FileExistsError as e:
    print("file already exists")

파일, 디렉토리 존재 여부

os.path.exists("log")
os.path.isfile("untitled.txt")

shutil(쉘 유틸)

파일을 이동시키거나 복사할 수 있다.

import shutil

source = "untitled.txt"
dest = os.path.join("log")

shutil.copy(source, dest)

os.path.join을 이용하면 현재 경로에 경로 추가가 쉽다. 맥과 윈도우는 sep이 다르기때문.

요즘엔 pathlib을 이용해 path를 객체로 다룸

import pathlib
cwd = pathlib.Path.cwd()
list(cwd.parents)
[WindowsPath('C:/Users/user/python'),
 WindowsPath('C:/Users/user'),
 WindowsPath('C:/Users'),
 WindowsPath('C:/')]

pickle

파이썬의 객체는 메모리에 있어야한다.

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

f = open("list.pickle", "wb")
test = [1, 2, 3, 4, 5]
pickle.dump(test, f)
f.close()
del test # test 객체를 list.pickle에 저장한 후 삭제한다.

f = open("list.pickle", "rb") #list.pickle로부터 로드
test_pickle = pickle.load(f)
print(test_pickle)

다른 객체들도 pickle을 이용해 영속화 가능

class Hello:
    def __init__(self, a, b):
        self.a = a
        self.b = b
    def bye(self):
        print('goodbye')
        
f = open("list.pickle", 'wb')
hello = Hello(10, 20)
pickle.dump(hello, f)
del hello
f.close()

피클에 저장 후 로드

f = open("list.pickle", 'rb')
hello2 = pickle.load(f)
hello2.bye()
hello2.a

결과

goodbye
10

Logging

로그 남기기
프로그램이 실행되는 동안 일어나는 정보를 기록 남기기
유저의 접근, Exception, 특정 함수의 사용 등
DB, 콘솔 출력
로그 분석을 통해 의미있는 결과 도출 가능

import logging

logging.debug("틀림")
logging.info("info")
logging.warning("warn")
logging.error("error")
logging.critical("critical")

  • 프로그램 진행 상황에 따라 다른 Level의 Log 출력
  • 개발시점, 운영시점마다 다른 Log가 남을수 있도록 지원함
  • Debug > INFO >WARNIGN >ERROR> CRITICAL

logging level 정의

profile
10분만 쉬어요

0개의 댓글