콘텐츠로 이동

05. 파일 입출력 (기록 남기기)

"변수에 담긴 값은 프로그램이 꺼지면 연기처럼 사라집니다 (휘발성). 영원히 간직하려면 파일(File)로 기록해야 합니다."

1. 멘탈 모델: RAM vs Disk

우리가 지금까지 다룬 변수(a = 10)는 RAM(작업대) 위에 있었습니다. 전원을 끄면 사라지죠. 파일 입출력은 이 데이터를 Disk(창고)로 옮기는 작업입니다.

graph LR
    subgraph RAM["⚡ RAM (휘발성)"]
        Var[변수 data]
    end

    subgraph Disk["💾 Disk (영구 저장)"]
        File[파일 data.txt]
    end

    Var -->|"Save (write)"| File
    File -->|"Load (read)"| Var

    style RAM fill:#fff9c4,stroke:#fbc02d
    style Disk fill:#e1f5fe,stroke:#01579b

2. 파일 쓰기 (Write)

w 모드 (덮어쓰기)

파일이 없으면 새로 만들고, 있으면 기존 내용을 싹 지우고 새로 씁니다.

# encoding="utf-8"은 한글이 깨지지 않게 하는 필수 주문입니다!
f = open("diary.txt", "w", encoding="utf-8")
f.write("오늘 파이썬 공부를 끝냈다.\n")
f.close()  # 꼭 닫아줘야 저장됨!

a 모드 (이어쓰기, Append)

기존 내용은 그대로 두고 맨 뒤에 내용을 추가합니다. (로그 남길 때 유용)

f = open("diary.txt", "a", encoding="utf-8")
f.write("내일도 열심히 해야지.\n")
f.close()

💡 with 구문 (강력 추천)

close()를 까먹는 실수를 막기 위해 with를 씁니다. 블록을 빠져나가면 자동으로 닫힙니다.

with open("diary.txt", "w", encoding="utf-8") as f:
    f.write("자동으로 닫히니까 편하다.")
# 여기서 이미 f.close()가 실행된 상태

3. 파일 읽기 (Read)

저장된 파일을 다시 변수로 불러옵니다.

with open("diary.txt", "r", encoding="utf-8") as f:
    content = f.read()  # 전체 내용을 하나의 문자열로 읽기
    print(content)

4. CSV/JSON 다루기 (AI와의 대화법)

단순한 텍스트 파일(.txt)보다는 구조화된 데이터 파일을 많이 씁니다. 특히 JSON은 AI 시대의 표준어입니다.

JSON (JavaScript Object Notation)

파이썬의 딕셔너리(dict)와 생김새가 99% 똑같습니다.

import json

data = {
    "name": "봉이",
    "level": 10,
    "skills": ["Python", "AI"]
}

# 1. 저장하기 (dump: 딕셔너리 -> 파일)
with open("save.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False) # 한글 깨짐 방지 옵션

# 2. 불러오기 (load: 파일 -> 딕셔너리)
with open("save.json", "r", encoding="utf-8") as f:
    loaded_data = json.load(f)
    print(loaded_data["name"])  # 봉이

AI와 협업 포인트: JSON

AI에게 복잡한 데이터를 달라고 할 때, 그냥 줄글로 달라고 하면 파이썬에서 쓰기 어렵습니다. 무조건 "JSON 형식으로 줘"라고 하세요.

> **프롬프트 예시:**
> "유명한 IT 기업 5곳의 이름, 설립년도, CEO 이름을 정리해서 **JSON 리스트 형식**으로 만들어줘."

이렇게 받으면 `json.load()` 한 방으로 바로 파이썬 리스트로 변환해 쓸 수 있습니다.

여기까지 기초 문법(재료 손질)이 끝났습니다. 이제 손질한 재료들을 모아서 진짜 요리(함수와 모듈)를 하러 가볼까요?

👉 3부: 코드의 구조 (정리 정돈) 보러가기