본문 바로가기

개발/Python

부스트캠프 AI Tech 3기 Pre-Course [4]-2 File Handling / 파일

File System 파일 시스템

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

 

기본적인 파일 종류

  • text
    문자열 형식이어서 사람이 알아볼 수 있음
    메모장으로 열었을 때 표시가 되는 파일
    ex)HTML, python 코드 파일
  • binary
    컴퓨터만 이해할 수 있는 형태
    메모장으로 열었을 때 이상한 문자들이 나오는 파일
    어플리케이션에 종속되어 있다.
    ex)한글, 엑셀

모든 text 파일도 실제는 binary로 저장되어있다.

ASCII문자열에 대응해서 저장됨

 

Python File In / Out

f = open("파일이름", "접근모드")
f.close()
파일 열기 모드(접근모드) 설명
r 읽기모드(read) : 파일을 읽기만 할 때 사용
w 쓰기모드(write) : 파일에 내용을 쓸 때 사용
a 추가모드(append) : 파일의 마지막에 새로운 내용을 추가 시킬 때 사용

파일이름 자리에 같은 폴더에 있을 때는 파일이름만 쓰면 되지만,

다른 폴더에 있다면 경로(주소)를 파일이름 자리에 넣어야 한다.

 

File Read

f = open("hello.txt", "r")
contents=f.read() #파일을 읽어옴
print(contents)
f.close()

f.close()를 하면 그 파일을 닫게 된다.

 

with open("hello.txt", 'r') as my_file:
    content_list = my_file.readlines()
    print(type(content_list))
    print(content_list)

with구문 안에서는 해당 코드가 실행되고

with구문이 끝나면 close된다.

 

readlines은 내용을 개행을 기준으로 자른다. 전체 내용을 불러와서 한 번에 다 읽어서 메모리에 올려두기에, 큰 파일을 읽기에는 부적절하다.

with open("hello.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

readline은 내용이 너무 길 때 한 줄씩만 읽는 방법이다.

 

File Write

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

encoding : 문자를 어떤 방식으로 어떤 표준 저장할 것이냐
한글은 utf8이나 utf16을 자주 쓴다. window에서는 CP949를 쓴다.

맥이랑 윈도우랑 같이 일을 하려면 그래서 utf8로 항상 encoding을 해 주어야 한다.

 

write이 텍스트를 이 파일에 적는다는 것

메모장에서 연 실행 결과

File Append

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

메모장에서 연 실행결과

OS module

파이썬에서 directory 다루기

import os
os.mkdir("new_f")

해당 파일이 있는 같은 위치에 new_f라는 이름을 가진 새 폴더가 생긴다

같은 이름의 폴더가 이미 있다면 에러가 난다.

 

print(os.path.exists("new_f"))

os.path.exists로 이미 그 폴더의 존재 여부를 확인할 수 있다.

True이면 이미 같은 이름의 폴더가 존재한다는 뜻이다.

os.path.isdir("폴더 이름")도 있다

 

import os
destination=os.path.join("new_f","hello.txt")
print(destination)

프린트 결과

경로가 복잡하다면 직접 쓰는 것보다 os마다 폴더를 들어갈 때 부호가 다를 수 있으므로 join을 사용해서 경로를 작성하는 것이 좋다.

 

※shutil:파일복사 등 유틸

※pathlib:경로를 객체로 다룰 수 있게 함, windows냐 linux냐에 따라서 다를 수 있는데 이것을 통일시킬 수 있다.

 

pickle

파이썬의 객체는 원래 메모리에 있다.

메모리는 python 인터프리터가 종료되면서 사라지는데 이것을 영속화 시키는 built-in 객체

데이터, object 등 실행중 정보를 저장해서 불러와서 용할 때 피클로 저장한다.

파이썬에 특화된 binary 파일이다.

import pickle
f=open("list.pickle","wb")
test=[1,2,3]
pickle.dump(test,f) #저장
f.close

del test #메모리에서 test 리스트 삭제

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

중간에 아예 test라는 리스트를 삭제했어도 pickle에서 불러와서 사용할 수 있다.

 

 

 

 

Reference : 부스트캠프 AI Tech 3기 Pre-Course - Module and Project