본문 바로가기
코딩교육/Python 초등교육에서 전문가까지

2단계 : 6. 파일 읽기 - read(), readline(), readlines()

by 제리토리 2025. 3. 28.
728x90
반응형

 

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 루프 사용 권장.

 

728x90
반응형