파일 입출력(File I/O) — 프로그램이 꺼져도 사라지지 않는 데이터
지금까지 만든 프로그램은 종료하면 입력했던 값이 모두 사라졌습니다. 이번에는 데이터를 파일에 저장해서, 프로그램을 껐다 켜도 남아있게 만드는 법을 배웁니다.
요즘은 고등학교에서도 코딩을 정규 과목으로 가르치는 시대입니다. 전공자가 아니어도 바이브 코딩(Vibe Coding)이나 생성형 AI(Generative AI)를 활용하면 누구나 그럴듯한 코드 결과물을 만들어낼 수 있게 되었죠.
개발 언어를 접하는, 전공자가 아닌 일반인 입문자가 많아진 것입니다.
이 시리즈는 글쓴이가 실제로 일반인, 고등학생 등 비전공자·입문자에게 파이썬을 가르치면서 정리한 내용들을 교재 형식으로 엮은 글입니다.최대한 쉽고 친절하게 설명하면서도, 컴퓨터와 프로그래밍 언어에 대한 기초 이론까지 함께 짚고 넘어가려 합니다.
고등학생, 비전공자, 완전 입문자도 따라올 수 있게끔 만든 시리즈이고, 실제 과외 수업 자료를 바탕으로 만들어서 학교 시험처럼 개념 확인 문제도 그대로 들어있어요.
중간중간 빈칸 채우기랑 학교 시험 유형 문제가 나오는데, 정답은 바로 안 보이게 접어뒀습니다. 먼저 스스로 생각해본 다음 "보기"를 눌러서 확인해보세요.

지금까지 만든 프로그램은 종료 후 다시 실행하면 모든 데이터가 사라졌습니다. 메모리(RAM)에만 저장했기 때문이에요. 파일에 저장하면 프로그램을 종료해도 데이터가 남아 있습니다.
학교에서 시험 범위를 생각해 봅시다. 머릿속으로만 외우면 시간이 지나면 잊어버립니다. 하지만 공책에 적어 놓으면 나중에도 다시 볼 수 있어요.
컴퓨터도 같습니다. 메모리(RAM)에만 저장하면 프로그램이 종료되는 순간 사라져요. 파일에 저장하면 컴퓨터를 껐다 켜도 계속 남아 있습니다.
open()으로 파일을 열 때는 파일 이름과 함께 어떤 목적으로 열지를 모드로 알려줘야 해요.
쓰기 모드는 "w"(write, 쓰기)입니다.
file.write("안녕하세요.")
file.close()
실행하면 코드가 있는 폴더에 memo.txt 파일이 새로 생깁니다. 내용은 안녕하세요.예요. file.close()로 파일을 사용한 후에는 반드시 닫아 주는 것이 좋습니다.
close()를 빼먹어도 당장 눈에 보이는 오류는 잘 나지 않아요. 프로그램이 완전히 종료되면 운영체제(OS)가 열려있던 파일을 강제로 정리(닫음)해 주기 때문입니다.
문제는 그 사이에 안전하지 않은 순간이 있다는 거예요. write()로 쓴 내용은 바로 파일에 저장되지 않고 메모리에 잠시 머물다가, close()를 호출하는 시점에 디스크로 확실히 기록됩니다. close()를 하지 않으면 프로그램이 중간에 강제 종료됐을 때 내용이 저장되지 못하고 사라질 수 있어요. 그래서 close() 또는 뒤에서 배울 with를 쓰는 습관을 들이는 게 안전합니다.
file.write("사과\n")
file.write("바나나\n")
file.write("포도\n")
file.close()
write()는 자동으로 줄바꿈을 해주지 않아서, 줄을 나누고 싶으면 문자열 끝에 \n을 직접 붙여야 해요.
파일을 읽을 때는 "r"(read, 읽기) 모드로 엽니다.
text = file.read()
print(text)
file.close()
file.write("딸기\n")
file.close()
기존 내용을 모두 지우고 새로 씁니다. 파일이 없으면 새로 만들어요.
기존 내용은 그대로 두고 뒤에 이어서 씁니다. 파일이 없으면 새로 만들어요.
이미 내용이 있는 파일을 "w"로 다시 열면, 그 순간 기존 내용은 전부 사라집니다. 데이터를 계속 쌓고 싶다면 "w"가 아니라 "a"를 써야 해요.
파일을 사용할 때는 더 편한 방법도 있어요.
file.write("안녕하세요.")
with를 쓰면 close()를 직접 작성하지 않아도 with 블록이 끝나는 순간 자동으로 파일이 닫혀요. close()를 깜빡하는 실수를 줄일 수 있어서, 처음 배울 때부터 with를 습관으로 들이는 걸 추천합니다.
한 줄씩 읽고 싶을 땐 이렇게 씁니다.
for line in file:
print(line)
- 모드 잘못 선택 —
"r"로 연 파일은 읽기만 가능합니다. 쓰기는 불가능해요. - "w"로 내용이 사라짐 — 기존 내용을 유지하고 싶은데
"w"로 열면 그 순간 전부 삭제됩니다. - close()를 잊어버림 —
file.write("Hello")뒤에close()가 없으면 안전하지 않아요. 가능하면with를 쓰는 습관을 들이는 게 좋습니다.
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로 파일을 여닫으니, 메모를 저장할 때마다 파일이 안전하게 열리고 닫혀요.
- 파일을 읽는 모드는
""입니다. - 파일에 내용을 추가하는 모드는
""입니다. - 기존 내용을 모두 지우고 새로 쓰는 모드는
""입니다.
정답
2. a
3. w
- 다음 코드를 실행하면 어떤 파일이 생성되는지, 그 내용은 무엇인지 서술하시오.
with open("test.txt", "w") as file:
file.write("Python") close()를 직접 호출하지 않아도 되는 이유를with와 관련지어 서술하시오.
정답
2. with 블록을 사용하면 블록이 끝나는 시점에 파이썬이 자동으로 file.close()를 호출해주기 때문입니다.
'Language > Python' 카테고리의 다른 글
| [고등학생부터, 파이썬] 17. 모듈 ( + random , math, datetime ) (0) | 2026.09.04 |
|---|---|
| [고등학생부터, 파이썬] 16. 함수 종합 프로젝트 (0) | 2026.09.01 |
| [고등학생부터, 파이썬] 15. 지역변수와 전역변수 (0) | 2026.08.28 |
| [고등학생부터, 파이썬] 14. 함수(Function) (0) | 2026.08.20 |
| [고등학생부터, 파이썬] 13. 자료구조 총정리 (0) | 2026.08.20 |
댓글