파이썬에서 파일 입출력 완벽 가이드: 기본부터 고급까지!

2024. 6. 16. 07:30Python/Python Programming

반응형

파이썬은 파일 입출력 기능을 통해 다양한 데이터를 저장하고 불러올 수 있는 강력한 프로그래밍 언어입니다.

텍스트 파일, 이미지, 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)
 

파일 내용 암호화 및 복호화

  • 중요한 데이터를 보호하기 위해 파일 내용을 암호화하고, 필요 시 복호화하여 사용합니다.
  • hashlibcryptography 모듈을 사용하여 암호화/복호화 작업을 수행할 수 있습니다.
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. 마무리

파이썬의 파일 입출력 기능은 다양한 데이터를 다루는 데 필수적인 도구입니다.

이 블로그를 통해 기본 개념부터 고급 활용법까지 꼼꼼하게 학습하여 데이터 처리 능력을 한 단계 업그레이드하세요!

반응형