파일 입출력 기초

in #krsuccess11 days ago

파일 입출력 기초: “저장해두고, 다음에 불러오기”부터 해보자!

3-3. 문자열 다루기에서 “글자”를 가지고 놀아봤다면, 이제 3-4에서는 파일이라는 ‘바깥 공간’에 데이터를 저장하고 다시 읽는 걸 해볼 거예요. 솔직히 말하면, 프로그램을 만들다 보면 결국 “다음 실행 때도 기억해야 하잖아?” 그 순간 파일이 필요하더라구요.

오늘은 딱 기초만! 열기 → 읽기 → 쓰기 흐름을 잡는 게 목표입니다.

Kanenori


준비물: 파이썬 파일 입출력 기본 개념

파일 입출력은 크게 이렇게 생각하면 편해요.

  • 열기(open): 파일을 “작업 모드”로 꺼내서 사용 준비
  • 읽기(read): 파일 내용 가져오기
  • 쓰기(write): 파일에 내용 남기기
  • 닫기(close): 작업 끝. (요즘은 자동으로 처리되게 잘 짜면 됨)

그리고 파이썬에선 보통 with를 쓰면 실수 확 줄어들어요. 나름 안전장치 같은 느낌!

422737


1) 파일 읽기: 내용 가져오기

예를 들어 sample.txt라는 파일이 있다고 해볼게요.

geralt

먼저 “텍스트 파일을 읽어서 출력”해보기.

file_path = "sample.txt"

with open(file_path, "r", encoding="utf-8") as f:
    text = f.read()

print(text)

여기서 핵심만 짚으면:

  • "r": read(읽기) 모드
  • encoding="utf-8": 한글 깨지는 거 방지용
  • with ... as f: 파일 핸들(f)을 안전하게 사용

아! 혹시 내가 예전에 한글 파일 읽다가 “왜 글자가 □□□로 나오지?” 했던 기억 있어요… 음… 사실은 거기서 많이 당했죠. 인코딩 안 맞으면 진짜 멘탈 깨져요. (유머로 넘기기엔 아픈 포인트)


2) 파일 읽기 한 줄씩: for로 편하게

read()는 전체를 통째로 가져오는데, 가끔은 줄 단위로 다루는 게 편할 때가 있어요.

file_path = "sample.txt"

with open(file_path, "r", encoding="utf-8") as f:
    for line in f:
        print(line.strip())
  • line은 한 줄씩 들어와요
  • strip()은 줄 끝의 \n 같은 거 제거해주는 친구

“그냥 전체를 다 읽자”가 항상 정답은 아니고, 데이터가 크면 줄 단위가 훨씬 낫더라구요.


3) 파일 쓰기: 저장해두기

이번엔 반대로 파일에 내용을 남겨볼게요. 예를 들어 output.txt에 써봅니다.

output_path = "output.txt"

with open(output_path, "w", encoding="utf-8") as f:
    f.write("안녕하세요!\n")
    f.write("파일에 저장되는 중이에요.\n")

여기서 "w"write(쓰기) 모드예요.

주의할 점 하나…!

  • "w" 모드는 기존 파일이 있으면 내용을 지워버릴 수도 있어요.
  • 그래서 실수로 기존 데이터를 날려버리면… 그때는 내가 너무 성급했었던 거예요. 솔직히 말하면 나도 몇 번 그랬고요 😇

jplenio


4) 기존 파일에 이어서 쓰기: "a" 모드

기존 내용을 유지하면서 뒤에 이어 붙이고 싶으면 "a"를 써요.

output_path = "output.txt"

with open(output_path, "a", encoding="utf-8") as f:
    f.write("그리고 이 줄은 이어서 추가돼요.\n")

이건 진짜 실전에서 자주 써요. 로그 남길 때도 보통 "a"로 시작하거든요.


5) 작은 실습: 문자열을 파일로 저장하고, 다시 읽기

자, 여기서 바로 “아, 이거 되네?” 느낌 오게 한 번 해봅시다.
(3-3에서 했던 문자열 감각도 그대로 써요!)

5-1) 입력을 받아 파일로 저장하기

name = input("이름을 입력하세요: ")

output_path = "profile.txt"

with open(output_path, "w", encoding="utf-8") as f:
    f.write(f"이름: {name}\n")

5-2) 저장한 파일 다시 읽어서 보여주기

input_path = "profile.txt"

with open(input_path, "r", encoding="utf-8") as f:
    content = f.read()

print("파일 내용:")
print(content)

이렇게 하면 프로그램이 “실행 끝나도 데이터는 남는다”는 걸 바로 체감할 수 있어요.

pixelcreatures


자주 겪는 실수 3가지 (나만 당한 거 아니지?)

  1. 파일 경로를 잘못 적는다

    • sample.txt를 어디에 두느냐에 따라 경로가 달라져요.
    • 그래서 저는 보통 “처음엔 같은 폴더에 두고” 시작해요. 나름 편합니다.
  2. 인코딩(encoding) 빼먹는다

    • 한글이 깨지면 99% 여기서 시작…!
    • 그래서 웬만하면 encoding="utf-8"은 습관처럼 넣어두면 좋아요.
  3. 쓰기 모드 "w"로 기존 내용을 날린다

    • 나도 한 번쯤 “어? 왜 파일이 비었지?” 했어요.
    • 그럴 땐 "a" 생각해보면 됨!

jplenio


다음 단계 예고: 3-5 데이터 프로젝트 미니 실습

오늘은 파일 입출력의 기본기를 잡았어요.
열고( open ) → 읽고( read ) → 쓰고( write ) 흐름, 그리고 with로 안전하게 다루는 법까지!

그럼 다음 3-5에서는 이걸 한 단계 더 응용해서, 데이터 프로젝트 미니 실습으로 “여러 데이터를 모아서 파일로 저장하고 다시 불러오는” 쪽으로 가볼 예정이에요.

솔직히 말하면, 파일이 들어가는 순간부터 프로그램이 진짜 “세상에 붙는 느낌”이 나거든요.
자, 이제 친구처럼 같이 가보자! 😄