[python] File Pointer / read() , readline() , readlines() 비교
A A

목차

    728x90

    1. 파일 포인터(File Pointer)란?

    파이썬에서 파일을 다룰 때 내부적으로 파일 포인터(file pointer)가 현재 읽기/쓰기 작업이 이뤄지는 위치를 가리킨다.

    파일을 열면 포인터는 항상 파일의 처음(0 바이트 위치)을 가리키고, 파일을 읽거나 쓰면서 이 포인터는 앞으로 이동한다.


    1-1. 파일 포인터 확인: tell()

    with open("example.txt", "r") as f:
        print(f.tell())  # 현재 위치 확인
        f.read(5)
        print(f.tell())  # 5바이트 읽은 후 위치

     

    tell() 메서드를 통해 현재 파일 포인터의 위치(바이트 단위)를 확인할 수 있음.


    1-2. 파일 포인터 이동: seek(offset, whence)

    with open("example.txt", "r") as f:
        f.seek(0)  # 처음으로 이동
        print(f.read(5))
        
        f.seek(0, 2)  # 파일 끝으로 이동
        print(f.tell())

     

    seek()은 파일 포인터를 원하는 위치로 이동시켜주는 함수.

    • offset: 이동할 바이트 수
    • whence: 기준 위치 (기본값은 0)
    whence 값 의미
    0 파일의 시작 (기본값)
    1 현재 위치
    2 파일의 끝

    1-3. 파일 포인터 정리

    • tell() → 현재 파일 포인터 위치 확인
    • seek() → 파일 포인터 위치 이동
    • 파일을 read()readline()으로 읽으면 자동으로 포인터는 앞으로 이동

     

     

     

    다음으로 파이썬에서 파일을 읽을 때 사용하는 함수 3가지에 대해 알아보고자 한다.

    2. read()

    파일 전체 내용을 한 번에 문자열로 읽는다. 파일 크기가 작거나, 한 번에 전체 내용을 처리해야 할 때 사용한다.

    • 리턴값: str
    • 파일 포인터는 끝으로 이동함
    with open("example.txt", "r") as f:
        content = f.read()
        print(content)

    주의: 큰 파일은 메모리를 많이 사용할 수 있다.


    3. readline()

    파일에서 한 줄씩 읽는다. 반복문과 함께 사용하면 편함.

    • 리턴값: str (줄바꿈 문자 포함)
    • 더 이상 읽을 줄이 없으면 빈 문자열 반환
    with open("example.txt", "r") as f:
        while True:
            line = f.readline()
            if not line:
                break
            print(line.strip())

    줄바꿈 문자 (\n)가 포함되어 있으니 출력할 땐 strip()을 자주 쓴다.


    4. readlines()

    파일 전체를 줄 단위로 읽어서 리스트로 반환한다.

    readlines(n) 인자를 통해, 줄 단위로 읽되 최대 n 바이트 만큼의 크기를 제한한다.

    • 리턴값: list[str]
    • 파일의 각 줄이 리스트의 요소가 됨
    with open("example.txt", "r") as f:
        lines = f.readlines()
        for line in lines:
            print(line.strip())

    주의: readlines()도 한 번에 메모리에 올리기 때문에 큰 파일에는 적절하지 않다.


    5. 요약

    함수 설명 리턴 타입 특징
    read() 전체 내용을 한 번에 읽음 str 소형 파일에 적합
    readline() 한 줄씩 읽음 str 루프와 함께 사용
    readlines() 전체 줄을 리스트로 읽음 list[str] 간단한 줄 처리
    seek(n) 파일 포인터를 n 위치로 이동 - 다시 읽을 때 사용

     

     

    Copyright 2024. GRAVITY all rights reserved