Python에서 텍스트 파일을 다룰 때 가장 중요한 작업 중 하나는 파일을 읽는 작업입니다. Python의 open() 함수로 파일을 연 후, 파일의 내용을 읽는 방식에는 대표적으로 세 가지 메서드가 있습니다:
✅ read()
✅ readline()
✅ readlines()
이 장에서는 각 메서드의 동작 원리, 차이점, 용도에 따른 선택 기준, 그리고 실무에서의 활용 방법을 코드 예제와 함께 심도 있게 설명합니다.
1. read() - 파일 전체 내용을 한 번에 읽기
㉮ 사용법
with open("example.txt", "r", encoding="utf-8") as file:
content = file.read()
print(content)
• 파일 전체 내용을 하나의 문자열(String) 로 반환합니다.
• 텍스트 파일의 줄바꿈(\n)도 문자열에 포함됩니다.
• 보통 작은 파일이나 전체를 한꺼번에 처리해야 할 경우에 사용합니다.
㉯ 장점과 한계
✅ 장점
• 코드가 간단하고 직관적임
❌ 단점
• 파일이 너무 클 경우 메모리를 많이 사용함 (GB 단위 파일은 비효율적)
㉰ 실전 활용
def read_all_text(filepath):
with open(filepath, "r", encoding="utf-8") as f:
return f.read()
2. readline() - 한 줄씩 읽기
㉮ 사용법
with open("example.txt", "r", encoding="utf-8") as file:
line1 = file.readline()
line2 = file.readline()
print(line1, end='')
print(line2, end='')
• 한 번 호출 시 한 줄씩 읽어옴.
• 내부적으로 커서를 이동시키므로 다음 readline()은 그다음 줄을 읽습니다.
• 반복문과 함께 사용하면 줄 단위 처리에 유리합니다.
㉯ while 문 활용
with open("example.txt", "r", encoding="utf-8") as file:
while True:
line = file.readline()
if not line:
break
print(line.strip())
㉰ 장점과 용도
✅ 장점
• 메모리 절약
• 라인별 필터링, 조건 적용 등 로직 삽입이 용이
❌ 단점
• 루프가 필요해 상대적으로 복잡함
3. readlines() - 모든 줄을 리스트로 읽기
㉮ 사용법
with open("example.txt", "r", encoding="utf-8") as file:
lines = file.readlines()
for line in lines:
print(line.strip())
• 파일의 각 줄을 리스트의 요소(str)로 저장합니다.
• 줄바꿈 문자인 \n이 포함되어 있음.
㉯ strip()과 함께 쓰기
줄바꿈 제거 시 strip()을 사용합니다.
lean_lines = [line.strip() for line in lines]
㉰ 장점과 한계
✅ 장점
• 한 줄씩 반복문 돌리기에 최적화된 구조
• 리스트이므로 인덱싱, 슬라이싱, 필터링 등에 매우 편리
❌ 단점
• 메모리 사용량은 read()와 유사 (큰 파일에 비효율적)
4. 세 메서드 비교 요약
메서드 | 반환값 | 용도 | 적합한 파일 크기 |
read() | 문자열 | 전체 파일 내용을 한 번에 처리 | 작을 때 적합 |
readline() | 문자열 | 한 줄씩 읽으며 실시간 처리 | 중~대형 파일 |
readlines() | 문자열 리스트 | 줄 단위로 일괄 읽고 리스트 처리 | 작거나 중간 정도 |
5. 실무 예제: 텍스트 로그에서 특정 키워드 찾기
def find_lines_with_keyword(filepath, keyword):
with open(filepath, "r", encoding="utf-8") as f:
return [line.strip() for line in f if keyword in line]
results = find_lines_with_keyword("server.log", "ERROR")
for r in results:
print(r)
✅ 로그 파일에서 특정 패턴의 줄만 추출 가능. 리스트 컴프리헨션과 궁합이 좋음.
6. 고급 팁: 대용량 파일 스트리밍 방식 처리
메모리 효율을 고려할 때는 제너레이터(Generator) 기반 처리도 고려할 수 있습니다.
def read_large_file(filepath):
with open(filepath, "r", encoding="utf-8") as f:
for line in f:
yield line.strip()
for line in read_large_file("bigdata.txt"):
# 줄마다 처리
print(line)
✅ yield를 통해 한 줄씩 읽어 메모리 효율 극대화
7. 요약
• read(): 전체 파일을 문자열로 읽음. 파일이 작을 때 적합.
• readline(): 한 줄씩 읽고 로직 삽입 가능. 중간 크기 이상에 적합.
• readlines(): 줄 단위로 리스트를 반환. 리스트 처리가 필요한 경우 적합.
• 줄바꿈 제거에는 strip() 활용.
• 대용량 파일은 제너레이터 + for 루프 사용 권장.
'코딩교육 > Python 초등교육에서 전문가까지' 카테고리의 다른 글
2단계 : 6. 파일 작업 후 반드시 닫기 - close() 와 with open의 차이와 선택기준 (0) | 2025.03.31 |
---|---|
2단계 : 6. 파일 쓰기 - write() 와 writelines 완벽 이해 (0) | 2025.03.30 |
2단계 : 6. 텍스트 파일 열기 (open() 함수와 파일 모드) (0) | 2025.03.27 |
2단계 : 5. 리스트와 반복문 (실습:도서관리시스템) (1) | 2025.03.26 |
2단계 : 5. 리스트와 반복문 (리스트 컴프리헨션의 소개 - 기본 활용법) (0) | 2025.03.25 |