RPG 게임을 할 때는 몬스터 정보만 파일로 만들어서 해서 무난하게 넘어갔는데, 이번에 도서관 관리 시스템을 작업하면서 생각보다 많은 파일을 만들어야 했다. 거기다가 한 데 모아서 정보를 출력할 수 있게 판다스 기능까지 추가하려고 하니 정신이 없어졌다. 파일을 불러와서 작업하는 게 많다는 생각이 들었고 이번 기회에 파일 입출력에 관해서 정리하는 것이 좋을 것 같았다.
.txt 파일
with open('example.txt', 'w') as file:
file.write('안녕하세요!\n')
file.write('파일 쓰기 예제입니다.\n')
file.write('파이썬으로 텍스트 파일을 쓸 수 있어요!\n')
with open('example.txt', 'r') as file:
contents = file.read()
print(contents)
.csv 파일
import csv
with open('example.csv', 'w', newline='') as file:
# CSV writer 객체 생성
writer = csv.writer(file)
# 데이터 쓰기
writer.writerow(['이름', '나이', '직업'])
writer.writerow(['Alice', 30, '개발자'])
writer.writerow(['Bob', 25, '디자이너'])
with open('example.csv', 'r') as file:
# CSV reader 객체 생성
reader = csv.reader(file)
# 각 행을 반복하며 데이터 읽기
for row in reader:
print(row)
파일 입출력 모드
- 텍스트 파일 쓰기 모드
'w' (write): 쓰기 모드. 파일이 이미 존재하면 덮어쓴다. (내용이 추가되지 않음)
'a' (append): 추가 쓰기 모드. 파일이 이미 존재하면 끝에 데이터를 추가한다.
'x' (exclusive creation): 쓰기 모드. 파일이 이미 존재하면 오류가 발생한다. (예외처리 필요)
'b' (binary mode): 이진 모드. 텍스트가 아닌 데이터를 처리할 때 사용된다.
- 텍스트 파일 읽기 모드
'r' (read): 읽기 모드. 파일이 없으면 오류가 발생한다.
'w+' (read and write): 읽기/쓰기 모드. 파일을 덮어쓰거나 새로 생성한다.
'a+' (read and append): 읽기/추가 모드. 파일을 읽거나 끝에 데이터를 추가한다.
- 바이너리 파일 모드
pickle모듈을 사용할 때 주로 사용한다
'wb' (binary write): 이진 파일 쓰기 모드.
'rb' (binary read): 이진 파일 읽기 모드.
'ab' (binary append): 이진 파일 추가 쓰기 모드.
'xb' (binary exclusive creation): 이진 파일 쓰기 모드.
- 텍스트 파일과 바이너리 파일 조합 모드
'w+t' (text write): 텍스트 파일을 텍스트 쓰기 모드로.
'r+b' (binary read): 이진 파일을 이진 읽기 모드로.
'a+tb' (binary read and append): 이진 파일을 추가 읽기 모드.
def write_csv_file(self, file_path, header):
member_data = [
self.get_name(),
self.get_birth(),
self.get_phone_number(),
self.get_email(),
self.get_address(),
self.get_id(),
self.get_password()
]
self.read_csv_file(file_path)
with open(file_path, mode='a', encoding='utf-8', newline='') as f:
writer = csv.writer(f)
if header:
writer.writerow(header)
writer.writerow(member_data)
print(f"{self.get_name()}님 반갑습니다! 등록이 완료되었습니다.")
Line.line_two()
@staticmethod
def read_csv_file(file_path):
try:
with open(file_path, mode='x', encoding='utf-8', newline='') as f:
header = ["Name", "Birth", "Phone Number", "Email", "Address", "ID", "Password"]
writer = csv.writer(f)
writer.writerow(header)
except FileExistsError:
pass
data = []
with open(file_path, mode='r', encoding='utf-8') as f:
reader = csv.reader(f)
next(reader)
for row in reader:
if row:
data.append(row)
return data
필요하다 싶은 곳에 메서드들을 마구잡이로 넣어놔서 정리는 하고싶은데, 수업시간에 배운 코드를 그대로 가져와 조금씩만 수정해뒀기 때문에 잘못 건드려서 오류가 날까봐 걱정이 됐었다. 블로그에는 간단하게 정리하긴 했지만 기준이 어느 정도 정해지고 나니 코드들을 다시 작성하는 것이 훨씬 수월했다.
그리고 csv 파일에 대해 배웠다고 일단 여기저기 사용해보면서 신기해하고는 있는데 정리하면서 알아보니 텍스트 파일은 기본적인 텍스트 데이터 저장에 사용되고, CSV 파일은 테이블 형식의 데이터를 저장할 때 효과적이며, 엑셀 파일은 풍부한 기능을 제공하여 데이터를 시각화하고 편집하기 위해 사용된다고 한다. 적재적소에 잘 사용할 수 있도록 연습을 많이 해봐야할 것 같다.
판다스에 대해서도 한번 짚고 넘어가야 할 것 같은데 일단 코드를 작성해보고 책이나 수업자료를 살펴보는 게 좋을 것 같다.
'Study > Python' 카테고리의 다른 글
데이터 모델링 : 정규화 vs 역정규화 (0) | 2023.10.17 |
---|---|
[Python] practice 3. Module Import 주의사항 (0) | 2023.09.12 |
[Python] practice 1. 포션 종류 및 효과 추가 (0) | 2023.08.29 |
[Python] practice 1. 구분선 출력 (0) | 2023.08.27 |
[Python] practice 1. 변수 (0) | 2023.08.27 |