1. open() 함수의 기본 개념

f = open("data.txt", "r")
  • open()은 파일을 열어서 file object를 반환함

  • 파일을 열면 OS에서 “파일 디스크립터”라는 자원을 사용함

  • 사용이 끝나면 반드시 f.close()로 닫아야 함

    (안 닫으면 메모리 누수, 파일 잠금 등 문제가 생길 수 있음)


2. with 유무

(1) with 사용 X

“직접 닫아줘야 함”

f = open("data.txt", "r")
data = f.read()
f.close()   # 직접 닫아줘야 함


단점

  • f.close()사용자가 직접 호출해야
  • 코드 중간에서 오류가 발생하면 close()가 실행되지 않을 위험이 큼
  • 파일 핸들이 OS에 계속 남아서 누수(leak) 위험


(2) with 사용 O

with open("data.txt", "r") as f:
    data = f.read()


장점

  • 블록을 벗어나는 순간 자동으로 close() 호출
  • 오류가 발생해도 파일이 자동으로 닫히기 때문에 안전
  • 코드가 더 깔끔함


Q) 왜 자동으로 닫히는가?

A) with 문은 context manager라는 Python 메커니즘을 사용함:

  1. enter 실행 → 파일 열림
  2. with 블록 종료 시 exit 실행 → 파일 닫힘

즉, 사람이 관리하지 않아도 Python이 resource 해제를 보장해줌.


Summary

방식 close 처리 안정성 권장 여부
open() 단독 개발자가 직접 close() 호출 오류 발생 시 닫히지 않을 위험 ❌ (비추천)
with open() 자동으로 닫힘 예외 발생해도 안전 ✅ (강력 추천)


3. 파일 읽기함수 정리

세 가지 방식

  • read
  • readline
  • readlines


파일 예시: hi.txt

Hi
I am
Seunghan


참고) 아래에서 fr는 generator다!

fr = open('hi.txt','r')


(1) read

  • 줄바꿈 상관 없이 끝까지 한 문자열
fr = open('hi.txt','r')
fr.read()
Hi₩nI am₩nSeunghan


(2) readline

  • 한 줄씩 얻어오기
fr = open('hi.txt','r')
print(fr.readline())
print(fr.readline())
print(fr.readline())
Hi
I am
Seunghan


(3) readlines

  • 줄 순서대로 list에 담음
fr = open('hi.txt','r')
fr.readlines()
['Hi₩n', 'I am₩n', 'Seunghan']


활용

fr = open('hi.txt','r')
fr.read().split('₩n')
['Hi', 'I am', 'Seunghan']

Categories:

Updated: