파일 사용하기

Tasker_Jang·2026년 2월 24일

1. 파일 쓰기 — write

파일에 문자열을 쓸 때는 open 함수로 파일을 열어 파일 객체를 얻은 뒤, write 메서드를 사용합니다. 작업이 끝나면 반드시 close파일을 닫아줘야 합니다.

# 파일에 문자열 쓰기
file = open("hello.txt", "w")    # 'w': 쓰기 모드
file.write("Hello, Python!\n")
file.close()                      # 반드시 닫아줘야 함

open 함수의 주요 모드를 정리하면 다음과 같습니다.

모드설명
'r'읽기 (기본값)
'w'쓰기 (파일이 있으면 내용을 덮어씀)
'a'추가 (파일 끝에 이어서 씀)
'rb' / 'wb'바이너리 읽기 / 쓰기

2. 파일 읽기 — read

파일을 읽을 때도 open으로 파일을 연 뒤, read 메서드로 내용을 가져옵니다.

# 파일 전체 읽기
file = open("hello.txt", "r")
content = file.read()
print(content)  # Hello, Python!
file.close()

3. with as — 자동으로 파일 닫기

파일을 열고 닫는 것을 매번 수동으로 하면 close를 빼먹기 쉽습니다. with as 구문을 사용하면 블록이 끝날 때 자동으로 파일을 닫아줍니다. 실전에서 가장 권장되는 방식입니다.

# with as: 자동으로 파일 닫기
with open("hello.txt", "w") as file:
    file.write("Hello, Python!\n")
# 블록을 벗어나면 자동으로 file.close() 호출

# 읽기도 동일
with open("hello.txt", "r") as file:
    content = file.read()
    print(content)

💡 with as를 사용하면 예외가 발생하더라도 파일이 안전하게 닫힙니다. 항상 with as를 사용하는 습관을 들이는 것이 좋습니다.


4. 여러 줄 쓰기와 읽기

반복문으로 여러 줄 쓰기

# for 반복문으로 여러 줄 쓰기
with open("numbers.txt", "w") as file:
    for i in range(1, 6):
        file.write(f"{i}번째 줄입니다.\n")

writelines — 리스트를 한번에 쓰기

writelines는 리스트에 들어 있는 문자열을 파일에 씁니다. 자동으로 줄바꿈을 추가하지 않으므로, 직접 \n을 포함해야 합니다.

# writelines: 리스트의 문자열을 파일에 쓰기
lines = ["첫 번째 줄\n", "두 번째 줄\n", "세 번째 줄\n"]

with open("output.txt", "w") as file:
    file.writelines(lines)

readlines — 모든 줄을 리스트로 읽기

readlines는 파일의 모든 줄을 한 줄씩 리스트의 형태로 가져옵니다.

# readlines: 모든 줄을 리스트로 반환
with open("output.txt", "r") as file:
    lines = file.readlines()
    print(lines)  # ['첫 번째 줄\n', '두 번째 줄\n', '세 번째 줄\n']

readline — 한 줄씩 읽기

한 줄씩 읽을 때는 whilereadline을 함께 사용합니다. readline은 더 이상 읽을 줄이 없으면 빈 문자열을 반환합니다.

# while + readline: 한 줄씩 읽기
with open("output.txt", "r") as file:
    line = file.readline()
    while line:
        print(line, end="")   # 이미 \n이 포함되어 있음
        line = file.readline()

for문으로 더 간단하게

for문을 사용하면 파일 객체를 직접 순회할 수 있어 훨씬 간결합니다.

# for문으로 한 줄씩 읽기 (가장 간결한 방법)
with open("output.txt", "r") as file:
    for line in file:
        print(line, end="")

파일 읽기/쓰기 메서드를 정리하면 다음과 같습니다.

메서드기능
write(문자열)문자열을 파일에 쓰기
writelines(리스트)리스트의 문자열을 한꺼번에 쓰기
read()파일 전체를 문자열로 읽기
readline()한 줄을 읽기
readlines()모든 줄을 리스트로 읽기

5. pickle — 객체를 파일에 저장하기

지금까지는 문자열을 파일에 저장했지만, 리스트, 딕셔너리, 클래스 인스턴스 같은 파이썬 객체를 그대로 파일에 저장하고 싶을 때가 있습니다. 이때 pickle 모듈을 사용합니다.

용어동작함수
피클링(pickling)객체 → 파일에 저장pickle.dump()
언피클링(unpickling)파일 → 객체로 복원pickle.load()

피클링 — 객체를 파일에 저장

pickle.dump를 사용하며, 파일은 반드시 바이너리 쓰기 모드('wb')로 열어야 합니다.

import pickle

# 피클링: 객체를 파일에 저장
data = {"name": "홍길동", "scores": [90, 85, 92], "grade": "A"}

with open("data.pkl", "wb") as file:
    pickle.dump(data, file)

언피클링 — 파일에서 객체 복원

pickle.load를 사용하며, 파일은 바이너리 읽기 모드('rb')로 열어야 합니다.

import pickle

# 언피클링: 파일에서 객체 복원
with open("data.pkl", "rb") as file:
    loaded_data = pickle.load(file)

print(loaded_data)
# {'name': '홍길동', 'scores': [90, 85, 92], 'grade': 'A'}

⚠️ pickle바이너리 형식으로 저장하므로, 일반 텍스트 에디터로는 내용을 확인할 수 없습니다. 또한 pickle 파일의 모드를 'w'/'r'로 열면 에러가 발생하니 반드시 'wb'/'rb'를 사용하세요.

profile
ML Engineer 🧠 | AI 모델 개발과 최적화 경험을 기록하며 성장하는 개발자 🚀 The light that burns twice as bright burns half as long ✨

0개의 댓글