본문 바로가기
Language/Python

[고등학생부터, 파이썬] 18. 파일 입출력

by kellis 2026. 9. 4.
반응형
고등학생부터, 파이썬 · 18화

파일 입출력(File I/O) — 프로그램이 꺼져도 사라지지 않는 데이터

지금까지 만든 프로그램은 종료하면 입력했던 값이 모두 사라졌습니다. 이번에는 데이터를 파일에 저장해서, 프로그램을 껐다 켜도 남아있게 만드는 법을 배웁니다.

이 시리즈를 시작하며

요즘은 고등학교에서도 코딩을 정규 과목으로 가르치는 시대입니다. 전공자가 아니어도 바이브 코딩(Vibe Coding)이나 생성형 AI(Generative AI)를 활용하면 누구나 그럴듯한 코드 결과물을 만들어낼 수 있게 되었죠. 

개발 언어를 접하는, 전공자가 아닌 일반인 입문자가 많아진 것입니다.

이 시리즈는 글쓴이가 실제로 일반인, 고등학생 등 비전공자·입문자에게 파이썬을 가르치면서 정리한 내용들을 교재 형식으로 엮은 글입니다.최대한 쉽고 친절하게 설명하면서도, 컴퓨터와 프로그래밍 언어에 대한 기초 이론까지 함께 짚고 넘어가려 합니다.

 

고등학생, 비전공자, 완전 입문자도 따라올 수 있게끔 만든 시리즈이고, 실제 과외 수업 자료를 바탕으로 만들어서 학교 시험처럼 개념 확인 문제도 그대로 들어있어요.

중간중간 빈칸 채우기학교 시험 유형 문제가 나오는데, 정답은 바로 안 보이게 접어뒀습니다. 먼저 스스로 생각해본 다음 "보기"를 눌러서 확인해보세요.

 

Chapter 34
파일 입출력(File I/O) · 데이터를 계속 남기는 법

지금까지 만든 프로그램은 종료 후 다시 실행하면 모든 데이터가 사라졌습니다. 메모리(RAM)에만 저장했기 때문이에요. 파일에 저장하면 프로그램을 종료해도 데이터가 남아 있습니다.

선생님 설명 · 시험지와 공책 이야기

학교에서 시험 범위를 생각해 봅시다. 머릿속으로만 외우면 시간이 지나면 잊어버립니다. 하지만 공책에 적어 놓으면 나중에도 다시 볼 수 있어요.

컴퓨터도 같습니다. 메모리(RAM)에만 저장하면 프로그램이 종료되는 순간 사라져요. 파일에 저장하면 컴퓨터를 껐다 켜도 계속 남아 있습니다.

파일 열기 · 기본 문법
python
open("파일이름", "모드")

open()으로 파일을 열 때는 파일 이름과 함께 어떤 목적으로 열지를 모드로 알려줘야 해요.

쓰기 모드는 "w"(write, 쓰기)입니다.

python
file = open("memo.txt", "w")
파일에 쓰기
python
file = open("memo.txt", "w")

file.write("안녕하세요.")

file.close()

실행하면 코드가 있는 폴더에 memo.txt 파일이 새로 생깁니다. 내용은 안녕하세요.예요. file.close()로 파일을 사용한 후에는 반드시 닫아 주는 것이 좋습니다.

close()를 빼먹으면 왜 바로 오류가 안 날까?

close()를 빼먹어도 당장 눈에 보이는 오류는 잘 나지 않아요. 프로그램이 완전히 종료되면 운영체제(OS)가 열려있던 파일을 강제로 정리(닫음)해 주기 때문입니다.

문제는 그 사이에 안전하지 않은 순간이 있다는 거예요. write()로 쓴 내용은 바로 파일에 저장되지 않고 메모리에 잠시 머물다가, close()를 호출하는 시점에 디스크로 확실히 기록됩니다. close()를 하지 않으면 프로그램이 중간에 강제 종료됐을 때 내용이 저장되지 못하고 사라질 수 있어요. 그래서 close() 또는 뒤에서 배울 with를 쓰는 습관을 들이는 게 안전합니다.

여러 줄 저장하기
python
file = open("memo.txt", "w")

file.write("사과\n")
file.write("바나나\n")
file.write("포도\n")

file.close()
실행 결과 (memo.txt 내용)
사과 바나나 포도

write()는 자동으로 줄바꿈을 해주지 않아서, 줄을 나누고 싶으면 문자열 끝에 \n을 직접 붙여야 해요.

읽기 모드

파일을 읽을 때는 "r"(read, 읽기) 모드로 엽니다.

python
file = open("memo.txt", "r")

text = file.read()

print(text)

file.close()
실행 결과
사과 바나나 포도
append(추가) 모드
python
file = open("memo.txt", "a")

file.write("딸기\n")

file.close()
실행 결과 (memo.txt 내용)
사과 바나나 포도 딸기
쓰기 · "w" (write)

기존 내용을 모두 지우고 새로 씁니다. 파일이 없으면 새로 만들어요.

추가 · "a" (append)

기존 내용은 그대로 두고 뒤에 이어서 씁니다. 파일이 없으면 새로 만들어요.

w와 a를 헷갈리면 생기는 일

이미 내용이 있는 파일을 "w"로 다시 열면, 그 순간 기존 내용은 전부 사라집니다. 데이터를 계속 쌓고 싶다면 "w"가 아니라 "a"를 써야 해요.

with 사용하기

파일을 사용할 때는 더 편한 방법도 있어요.

python
with open("memo.txt", "w") as file:
    file.write("안녕하세요.")

with를 쓰면 close()를 직접 작성하지 않아도 with 블록이 끝나는 순간 자동으로 파일이 닫혀요. close()를 깜빡하는 실수를 줄일 수 있어서, 처음 배울 때부터 with를 습관으로 들이는 걸 추천합니다.

한 줄씩 읽고 싶을 땐 이렇게 씁니다.

python
with open("memo.txt", "r") as file:
    for line in file:
        print(line)
자주 하는 실수
  • 모드 잘못 선택"r"로 연 파일은 읽기만 가능합니다. 쓰기는 불가능해요.
  • "w"로 내용이 사라짐 — 기존 내용을 유지하고 싶은데 "w"로 열면 그 순간 전부 삭제됩니다.
  • close()를 잊어버림file.write("Hello") 뒤에 close()가 없으면 안전하지 않아요. 가능하면 with를 쓰는 습관을 들이는 게 좋습니다.
종합 예제 · 메모장 프로그램
python
while True:
    print()
    print("===== 메모장 =====")
    print("1. 메모 저장")
    print("2. 메모 보기")
    print("3. 종료")

    menu = input("선택 : ")

    if menu == "1":
        memo = input("메모 입력 : ")

        with open("memo.txt", "a") as file:
            file.write(memo + "\n")

    elif menu == "2":
        with open("memo.txt", "r") as file:
            print(file.read())

    elif menu == "3":
        break

    else:
        print("잘못 입력했습니다.")

메뉴에서 "1"을 고르면 입력한 메모를 "a" 모드로 파일에 이어서 저장하고, "2"를 고르면 "r" 모드로 열어 지금까지 저장된 메모를 전부 출력합니다. while True 안에서 with로 파일을 여닫으니, 메모를 저장할 때마다 파일이 안전하게 열리고 닫혀요.

빈칸 채우기
  1. 파일을 읽는 모드는 ""입니다.
  2. 파일에 내용을 추가하는 모드는 ""입니다.
  3. 기존 내용을 모두 지우고 새로 쓰는 모드는 ""입니다.
정답
1. r
2. a
3. w
학교 시험 유형
  1. 다음 코드를 실행하면 어떤 파일이 생성되는지, 그 내용은 무엇인지 서술하시오.
    python
    with open("test.txt", "w") as file:
        file.write("Python")
  2. close()를 직접 호출하지 않아도 되는 이유를 with와 관련지어 서술하시오.
정답
1. test.txt라는 파일이 생성되고, 내용은 Python입니다. "w" 모드이므로 파일이 없으면 새로 만들고, 있으면 기존 내용을 지운 뒤 새로 씁니다.

2. with 블록을 사용하면 블록이 끝나는 시점에 파이썬이 자동으로 file.close()를 호출해주기 때문입니다.
다음 화 예고 — 다음 화에서는 지금까지 배운 개념들을 하나로 묶어서 사용하는 클래스(Class)를 배웁니다. 변수와 함수를 하나의 "설계도"로 묶어 나만의 자료형을 만드는 법을 파이썬 코드로 직접 다뤄볼게요.
반응형

댓글