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 메커니즘을 사용함:
- enter 실행 → 파일 열림
- with 블록 종료 시 exit 실행 → 파일 닫힘
즉, 사람이 관리하지 않아도 Python이 resource 해제를 보장해줌.
Summary
| 방식 | close 처리 | 안정성 | 권장 여부 |
|---|---|---|---|
| open() 단독 | 개발자가 직접 close() 호출 | 오류 발생 시 닫히지 않을 위험 | ❌ (비추천) |
| with open() | 자동으로 닫힘 | 예외 발생해도 안전 | ✅ (강력 추천) |
3. 파일 읽기함수 정리
세 가지 방식
readreadlinereadlines
파일 예시: 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']