파일 입출력

1. 파일 입출력

파이썬에서 파일 처리는 데이터를 영구적으로 저장하고 불러오는 중요한 기능이다.

파일 입출력을 통해 프로그램 실행 간에 데이터를 유지하거나 외부 데이터를 처리할 수 있다.

 

1.1. 파일 열기와 닫기

파이썬에서 파일을 열고 닫을 때는 open() 함수와 close() 메서드를 사용한다.

open() 함수는 두 개의 주요 매개변수를 받는다.

  • 첫 번째 매개변수: 파일 경로
  • 두 번째 매개변수: 파일 열기 모드

ex)

# 파일 열기
file = open('example.txt', 'w')  # 쓰기 모드로 파일 열기

# 파일 작업 수행
file.write('안녕하세요!')

# 파일 닫기
file.close()

 

1.2. 파일 열기 모드

파일을 열 때 다양한 모드를 지정할 수 있다.

모드 설명
r 읽기 모드 (기본값)
w 쓰기 모드 (파일이 있으면 내용 덮어쓰기, 없으면 새로 생성)
a 추가 모드 (파일 끝에 내용 추가)
x 배타적 생성 모드 (파일이 이미 있으면 실패)
b 바이너리 모드 (텍스트가 아닌 바이너리 데이터 처리)
t 텍스트 모드 (기본값)
+ 읽기/쓰기 모드 (다른 모드와 함께 사용)

 

ex)

# 읽기 모드로 파일 열기
file_read = open('example.txt', 'r')

# 추가 모드로 파일 열기
file_append = open('example.txt', 'a')

# 바이너리 쓰기 모드로 파일 열기
file_binary = open('data.bin', 'wb')

# 읽기/쓰기 모드로 파일 열기
file_read_write = open('example.txt', 'r+')

 

파일 작업이 끝나면 반드시 close()로 파일을 닫아야 한다.

 

 

2. 파일 쓰기

2.1. write() 메서드

write() 메서드는 파일에 문자열 데이터를 쓴다.

write()는 줄바꿈을 자동으로 추가하지 않으므로, 필요하다면 \n 문자를 명시적으로 추가해야 한다.

 

ex)

file = open('message.txt', 'w')
file.write('안녕하세요!\n')
file.write('파이썬 파일 입출력 학습 중입니다.')
file.close()

 

2.2. writelines() 메서드

writelines() 메서드는 문자열 리스트를 한 번에 파일에 쓸 수 있다.

이 메서드도 줄바꿈을 자동으로 추가하지 않으므로, 리스트의 각 문자열에 줄바꿈을 포함해야 한다.

 

ex)

lines = ['첫 번째 줄\n', '두 번째 줄\n', '세 번째 줄\n']
file = open('lines.txt', 'w')
file.writelines(lines)
file.close()

 

 

3. 파일 읽기

3.1. read() 메서드

read() 메서드는 파일의 전체 내용을 하나의 문자열로 읽어온다.

 

ex)

file = open('message.txt', 'r')
content = file.read()
print(content)
file.close()

 

선택적으로 읽을 바이트 수를 지정할 수도 있다.

 

ex)

file = open('message.txt', 'r')
first_ten = file.read(10)  # 처음 10바이트만 읽기
print(first_ten)
file.close()

 

3.2. readline() 메서드

readline() 메서드는 파일에서 한 줄씩 읽어온다.

 

ex)

file = open('lines.txt', 'r')
first_line = file.readline()
second_line = file.readline()
print(first_line, end='')  # 줄바꿈이 이미 포함되어 있으므로 end='' 사용
print(second_line, end='')
file.close()

 

3.3. readlines() 메서드

readlines() 메서드는 파일의 모든 줄을 읽어 리스트로 반환한다.

 

ex)

file = open('lines.txt', 'r')
lines = file.readlines()
print(lines)  # ['첫 번째 줄\n', '두 번째 줄\n', '세 번째 줄\n']
file.close()

 

3.4. 파일 반복하기

파일 객체는 이터러블(iterable)하므로, 반복문을 사용해 한 줄씩 처리할 수 있다.

 

ex)

file = open('lines.txt', 'r')
for line in file:
    print(line, end='')  # 줄바꿈이 이미 포함되어 있으므로 end='' 사용
file.close()

 

3.5. while 루프로 파일 읽기

readline() 메서드와 while 루프를 조합하여 파일을 줄 단위로 처리할 수 있다.

 

ex)

file = open('lines.txt', 'r')
while True:
    line = file.readline()
    if not line:  # 빈 문자열이면 파일의 끝
        break
    print(line, end='')
file.close()

 

빈 줄(\n)은 if not line에서 False로 평가되지 않으므로, 파일의 끝에 도달했을 때만 루프가 종료된다.

 

 

4. with 문을 사용한 파일 처리

파이썬에서는 with 문을 사용해 파일을 보다 안전하게 처리할 수 있다.

with 문은 블록이 끝나면 자동으로 파일을 닫아주므로, close() 메서드를 명시적으로 호출할 필요가 없다.

 

4.1. with 문 기본 사용법

ex)

# with 문 사용 (자동으로 파일 닫기)
with open('example.txt', 'w') as file:
    file.write('with 문을 사용한 파일 쓰기')
# 이 지점에서 file은 자동으로 닫힘

# 여러 파일 동시에 열기
with open('input.txt', 'r') as input_file, open('output.txt', 'w') as output_file:
    data = input_file.read()
    output_file.write(data)
# 두 파일 모두 자동으로 닫힘

 

with 문을 사용하면 파일을 닫지 않는 실수를 방지할 수 있으며, 예외가 발생해도 파일이 안전하게 닫힌다.

 

 

5. pickle 모듈

pickle 모듈은 파이썬 객체를 직렬화하고 역직렬화하는 기능을 제공한다.

데이터를 다시 사용하거나 다른 프로그램에서 데이터를 재사용해야 할 때, 데이터를 파일 형태로 저장하거나 불러올 수 있다.

 

5.1. 기본 개념

pickle을 사용하면 파이썬의 거의 모든 객체(리스트, 딕셔너리, 클래스 등)를 파일에 저장하고 나중에 다시 불러올 수 있다.

pickle로 저장한 파일은 텍스트가 아닌 바이너리 형태로 저장되므로, 파일을 열 때 바이너리 모드(wb, rb)를 사용해야 한다.

 

5.2. 데이터 저장하기

dump() 함수를 사용하여 데이터를 파일에 저장한다.

dump() 함수는 두 개의 주요 매개변수를 받는다.

  • 첫 번째 매개변수: 저장할 데이터 객체
  • 두 번째 매개변수: 저장할 파일 객체

ex)

import pickle

# 저장할 데이터
data = {
    'name': '홍길동',
    'age': 30,
    'scores': [90, 85, 95],
    'is_active': True
}

# 바이너리 쓰기 모드로 파일 열기
with open('data.pickle', 'wb') as file:
    # 데이터를 파일에 저장
    pickle.dump(data, file)

print("데이터가 성공적으로 저장되었습니다.")

 

5.3. 데이터 불러오기

load() 함수를 사용하여 저장된 데이터를 불러온다.

load() 함수는 저장된 데이터를 원래의 파이썬 객체로 복원한다.

 

ex)

import pickle

# 바이너리 읽기 모드로 파일 열기
with open('data.pickle', 'rb') as file:
    # 파일에서 데이터 불러오기
    loaded_data = pickle.load(file)

print("불러온 데이터:", loaded_data)
print("이름:", loaded_data['name'])
print("점수:", loaded_data['scores'])

 

'학습 > Python' 카테고리의 다른 글

파이썬 클래스  (0) 2025.05.02
파이썬 함수  (1) 2025.05.01
표준 입출력 및 문자열 포맷팅  (0) 2025.04.29
조건문, 반복문  (1) 2025.04.25
자료구조  (0) 2025.04.19