파이썬은 파일 입출력 기능을 통해 다양한 데이터를 저장하고 불러올 수 있는 강력한 프로그래밍 언어입니다.
텍스트 파일, 이미지, CSV 파일 등을 손쉽게 처리하여 데이터 분석, 웹 개발, 자동화 작업 등에 활용할 수 있습니다.
이 블로그에서는 파이썬에서 파일 입출력을 배우는 데 필요한 모든 것을 단계별로 안내하며, 실제 예시를 통해 이해를 돕고, 다양한 활용법을 소개합니다.
1. 파일 입출력 기본 개념
파일 객체: 파일을 다루기 위해 사용하는 객체입니다. open() 함수를 사용하여 파일을 열고, 다양한 메서드를 통해 파일을 읽고 씁니다.
# 파일 열기
with open('myfile.txt', 'r') as f:
# 파일 내용 읽기
data = f.read()
print(data)
읽기 모드: 파일 내용을 읽어 메모리에 저장합니다. 'r' 모드로 파일을 엽니다.
# 파일 읽기
with open('myfile.txt', 'r') as f:
line = f.readline() # 한 줄씩 읽기
print(line)
쓰기 모드: 메모리에 있는 데이터를 파일에 저장합니다. 'w' 모드로 파일을 엽니다.
# 파일에 쓰기
with open('myfile.txt', 'w') as f:
f.write('Hello, world!')
추가 모드: 파일에 이미 있는 내용에 이어서 데이터를 저장합니다. 'a' 모드로 파일을 엽니다.
# 파일에 추가 쓰기
with open('myfile.txt', 'a') as f:
f.write('\nThis is a new line.')
바이너리 모드: 바이너리 데이터를 처리합니다. 'rb', 'wb', 'ab' 모드로 파일을 엽니다.
# 이미지 파일 읽기 (바이너리 모드)
with open('image.jpg', 'rb') as f:
image_data = f.read()
2. 텍스트 파일 입출력
open() 함수: 파일 객체를 생성합니다. 파일 경로, 모드 등을 매개변수로 전달합니다.
# 파일 열기
f = open('myfile.txt', 'r')
read() 메서드: 파일 내용을 문자열로 읽습니다.
# 파일 내용 읽기
data = f.read()
print(data)
write() 메서드: 문자열을 파일에 씁니다.
# 파일에 쓰기
f.write('Hello, world!')
readline() 메서드: 파일에서 한 줄씩 읽습니다.
# 파일 한 줄씩 읽기
while True:
line = f.readline()
if not line:
break
print(line)
close() 메서드: 파일 객체를 닫습니다.
# 파일 닫기
f.close()
3. CSV 파일 입출력
csv 모듈: CSV 파일을 처리하기 위한 모듈입니다.
import csv
reader() 함수: CSV 파일을 읽는 객체를 반환합니다.
with open('data.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
print(row)
writer() 함수: CSV 파일에 쓰는 객체를 반환합니다.
with open('data.csv', 'w') as f:
writer = csv.writer(f)
writer.writerow(['name', 'age', 'city'])
writer.writerow(['Alice', 30, 'Seoul'])
writer.writerow(['Bob', 25, 'New York'])
4. 이미지 파일 입출력
Pillow 라이브러리: 이미지 파일을 처리하기 위한 강력한 라이브러리입니다. 설치가 필요하며, 다양한 이미지 작업을 지원합니다.
# Pillow 라이브러리 설치
pip install Pillow
이미지 읽기 및 저장
from PIL import Image
# 이미지 읽기
image = Image.open('image.jpg')
# 이미지 출력
image.show()
# 이미지 다른 형식으로 저장
image.save('image.png')
이미지 처리
- 크기 조정: resize() 메서드
- 자르기: crop() 메서드
- 회전: rotate() 메서드
- 밝기 조절: brightness() 메서드
- 흐림 효과: blur() 메서드
- 필터 적용: filter() 메서드
예시
from PIL import Image
# 이미지 읽기
image = Image.open('image.jpg')
# 이미지 크기 절반으로 줄이기
resized_image = image.resize((image.width // 2, image.height // 2))
resized_image.show()
# 이미지 상단 100픽셀 자르기
cropped_image = image.crop((0, 0, image.width, image.height - 100))
cropped_image.show()
# 이미지 90도 회전
rotated_image = image.rotate(90)
rotated_image.show()
Pillow 라이브러리 활용
- 사진 앨범 만들기
- 썸네일 이미지 생성
- 이미지 합성
- 이미지 편집
5. 고급 파일 입출력 활용법
상대 경로 및 절대 경로
- 상대 경로: 현재 작업 디렉토리를 기준으로 파일 경로를 지정합니다.
- 예시: open('data.csv', 'r') 은 현재 작업 디렉토리에 있는 data.csv 파일을 엽니다.
- 절대 경로: 시스템의 루트 디렉토리를 기준으로 파일 경로를 지정합니다.
- 예시: /home/user/data/data.csv 는 /home/user/data 디렉토리에 있는 data.csv 파일을 엽니다.
예외 처리
- 파일 입출력 중 발생하는 오류를 처리합니다.
- try-except 블록을 사용하여 오류 발생 시 코드 실행을 중단하고 적절한 처리를 수행합니다.
try:
with open('data.csv', 'r') as f:
# 파일 처리 코드
except FileNotFoundError as e:
print(f'파일을 찾을 수 없습니다: {e.filename}')
except Exception as e:
print(f'알 수 없는 오류 발생: {e}')
파일 시스템 관리
- 디렉토리 생성, 삭제, 파일 목록 조회 등의 작업을 수행합니다.
- os 모듈을 사용하여 파일 시스템 관련 함수를 사용할 수 있습니다.
import os
# 디렉토리 생성
os.makedirs('mydir')
# 디렉토리 삭제
os.rmdir('mydir')
# 파일 목록 조회
files = os.listdir('.')
print(files)
파일 내용 암호화 및 복호화
- 중요한 데이터를 보호하기 위해 파일 내용을 암호화하고, 필요 시 복호화하여 사용합니다.
- hashlib 및 cryptography 모듈을 사용하여 암호화/복호화 작업을 수행할 수 있습니다.
import hashlib
import cryptography.fernet
# 파일 내용 해시값 계산
def get_hash(filename):
with open(filename, 'rb') as f:
h = hashlib.sha256()
h.update(f.read())
return h.hexdigest()
# 파일 내용 암호화
def encrypt_file(filename, key):
f = Fernet(key)
with open(filename, 'rb') as input_f, open(filename + '.enc', 'wb') as output_f:
output_f.write(f.encrypt(input_f.read()))
# 파일 내용 복호화
def decrypt_file(filename, key):
f = Fernet(key)
with open(filename + '.enc', 'rb') as input_f, open(filename, 'wb') as output_f:
output_f.write(f.decrypt(input_f.read()))
6. 마무리
파이썬의 파일 입출력 기능은 다양한 데이터를 다루는 데 필수적인 도구입니다.
이 블로그를 통해 기본 개념부터 고급 활용법까지 꼼꼼하게 학습하여 데이터 처리 능력을 한 단계 업그레이드하세요!
'Python > Python Programming' 카테고리의 다른 글
파이썬 버전, 선택은 현명하게! 주의 사항부터 활용 팁까지 (0) | 2024.06.16 |
---|---|
ODL(Operator Discretization Library) 완벽 가이드: 파이썬에서 미분 방정식 문제 해결의 세계를 열다! (0) | 2024.06.16 |
파이썬과 함께하는 주피터 노트북: 데이터 분석과 머신러닝을 위한 강력한 도구 (자세한 사용 방법 포함) (1) | 2024.06.09 |
파이썬 포매팅: 문자열 출력을 더욱 풍부하게 만들어주는 기술 (2) | 2024.06.03 |
파이썬에서 이미지 표시하는 방법 (0) | 2024.05.30 |