
w 모드 사용 : 파일을 열어서(없으면 생성) 내용을 작성try:
# 파일 기록 모드(w)로 열기
file = open("./test.txt", "w")
file.write("안녕하세요")
file.writelines(반갑습니다. \n여러 줄 작성 가능)
except Exception as e:
print("파일 쓰기 중 예외 발생:", e)
finally:
file.close()r 모드 사용 : 파일 읽는 예시 try:
# 기본적인 읽기는 이터레이터 형식 - 한 번 읽으면 다시 못 읽습니다.
# 다시 읽고자 하는 경우는 open 부터 다시 해야 합니다.
file = open("./test.txt", "r")
content = file.read() # 한번에 다 읽기
print(content)
except Exception as e:
print("파일 쓰기 중 예외 발생:", e)
finally:
file.close() try:
file = open("./test.txt", "r")
# 줄 단위 읽기
for line in file:
print(line)
except Exception as e:
print("파일 쓰기 중 예외 발생:", e)
finally:
file.close()close() 이용)with open() as 임시변수with 블럭이 끝날 때, 예외 발생 여부에 상관없이 파일을 닫아 줍니다. # with 블럭을 사용하면 with 안에서 개방한 파일을 닫지 않아도 블럭이 끝나면 자동으로 닫아줍니다.
with open("./test.txt", "r") as file:
# 줄 단위 읽기
for line in file:
print(line) 이름 나이 주소
A 34 서울시 양천구 목동
B 27 주소 불명 # 한글이 포함된 경우는 encoding을 확인해 볼 필요가 있음
with open("./data.csv", "r", encoding="utf-8") as file:
datas = file.readline()
print(datas)
print(datas.split(sep=','))
sample = file.readlines()
print(sample)바이트 단위로 읽고 쓰는 파일
문자열을 직접 기록하지 않고 byte 배열로 변환해서 기록
바이너리 파일을 읽고 쓸 때는 모드에 b를 추가하면 됩니다.
문자열을 byte 배열로 encode 하여 bin 파일에 저장
with open("./test.bin", "wb") as f:
# 문자열을 byte 배열(bytes)로 변환해서 기록
f.write("안녕하세요".encode())
bin 파일에서 byte 배열을 읽고 문자열로 decode 하여 출력
with open("./test.bin","rb") as f:
byteArray = f.read()
# 웹에서 ajax로 데이터 불러왔을 때 바로 출력하면 이 형태로 보입니다.
print(byteArray)
# byte 배열을 문자열로 변환해서 출력
print(byteArray.decode())
encoding
decoding
인스턴스 단위로 파일에 저장하는 것
응용 프로그램을 만들 때 사용하는 방법으로 파일이 존재한다고 하더라도 원본 클래스가 없으면 해석이 불가능
파이썬에서는 pickle 모듈이나 DBM 관련 모듈을 이용해서 작업
파일에 내용을 기록
파일에서 내용을 읽어오기
pickle 모듈을 활용하여 인스턴스 1개를 파일에 저장 및 불러오기
import pickle
class VO:
def __init__(self, num:int=0, name:str="") -> None:
self.__num = num
self.__name = name
def setNum(self, num):
self.__num = num
def setName(self, name):
self.__name = name
def getNum(self):
return self.__num
def getName(self):
return self.__name
# 인스턴스를 출력하기 위해서, 인스턴스를 참조하는 데이터를, 출력하는 함수에 대입했을 때 호출되는 메서드
def __str__(self) -> str:
return f"번호:{self.__num} 이름:{self.__name}"
data1 = VO(1, "아담")
# 객체를 파일에 직접 저장 : Serializable
with open('./test.txt', 'wb') as f:
pickle.dump(data1, f)
with open('./test.txt', 'rb') as f:
data2 = pickle.load(f)
print(data2)
pickle 모듈을 활용하여 여러 개의 인스턴스를 파일에 저장 및 불러오기
import pickle
class VO:
def __init__(self, num:int=0, name:str="") -> None:
self.__num = num
self.__name = name
def setNum(self, num):
self.__num = num
def setName(self, name):
self.__name = name
def getNum(self):
return self.__num
def getName(self):
return self.__name
# 인스턴스를 출력하기 위해서, 인스턴스를 참조하는 데이터를, 출력하는 함수에 대입했을 때 호출되는 메서드
def __str__(self) -> str:
return f"번호:{self.__num} 이름:{self.__name}"
data1 = VO(1, "아담")
data2 = VO(2, "이브")
# 여러 개의 객체를 저장할 때, list로 묶어서 저장
li = [data1, data2]
with open('./test.txt', 'wb') as f:
pickle.dump(li, f)
with open('./test.txt', 'rb') as f:
datas = pickle.load(f)
for data in datas:
print(data)
압축을 하는 이유는 여러 개의 파일을 하나로 만들어서 사용하거나 크기를 줄이기 위해서 사용
클라우드에서 데이터를 백업하는 방식은 데이터베이스, 파일, 압축 파일 3종류가 있습니다.
오래되고 당장 사용하지 않을 것 같은 파일은 압축해서 보관하는 것이 좋습니다.
파이썬은 기본적으로 zip 과 tar 압축 모듈을 제공
zip은 zipfile 이라는 모듈의 ZipFile 함수를 이용하서 객체를 생성하고 wirte 함수로 압축을 합니다.
import zipfile
with zipfile.ZipFile("test.zip", "w") as myzip:
# 압축할 파일 경로
filelist = ["data.csv", "test.txt", "test.bin"]
for file in filelist:
myzip.write(file)

파일 삭제 후 다시 압축 해제

압축 해제는 extractall 이라는 함수를 이용
# 압축 해제
import zipfile
zipfile.ZipFile("./test.zip").extractall()

리눅스의 압축 표준인 tar는 tarfile 이라는 모듈의 open 함수를 이용해서 객체를 만들고 add를 이용해서 압축을 수행하고 extractall 함수를 이용해서 압축을 해제