파이썬으로 파일 읽기

개요

저장된 데이터로 작업하기 위해 파일 처리는 모든 전문 Python 프로그래머의 핵심 지식이 됩니다. 초기 릴리스부터 파일에 데이터를 읽고 쓰는 기능은 모두 내장된 Python 기능입니다. C 또는 Java와 같은 다른 프로그래밍 언어와 비교할 때 매우 간단하고 몇 줄의 코드만 있으면 됩니다. 또한 이를 제대로 수행하기 위해 추가 모듈을 로드할 필요가 없습니다.

이 기사에서는 예제를 통해 Python으로 파일을 읽는 방법을 설명합니다. 몇 가지 예에는 파일을 줄 단위로 청크(한 번에 정의된 줄 수)로 읽고 한 번에 파일을 읽는 것이 포함됩니다. 또한 전체 파일을 검색하지 않고 파일에서 특정 줄만 읽는 방법을 보여줍니다.

파이썬의 파일 기초

파일로 작업하는 일반적인 방법은 다음과 같습니다. open() 파일을 열려면, seek() 주어진 오프셋에서 파일의 현재 위치를 설정하고, close() 사용이 끝나면 파일 개체를 닫습니다. 내장 open() 함수는 읽기, 쓰기 또는 추가를 위해 파일에 액세스하는 데 사용할 파일 개체를 나타내는 파일 핸들을 반환합니다.

읽기 위해 파일을 열 때 Python은 시스템에서 파일을 어떻게 열어야 하는지 정확히 알아야 합니다. 읽기 및 바이너리 모드 읽기의 두 가지 액세스 모드를 사용할 수 있습니다. 사용된 각각의 플래그는 'r''rb', 내장된 파일을 열 때 지정해야 합니다. open() 기능. 첫 번째 모드에는 줄 바꿈을 나타내는 "CR"(캐리지 리턴) 및 "LF"(줄 바꿈)와 같은 특수 문자의 해석이 포함되는 반면 바이너리 모드를 사용하면 데이터가 있는 그대로 저장되는 원시 모드에서 데이터를 읽을 수 있습니다. 더 이상의 해석 없이.

파일을 열면, open() 함수는 파일 객체를 반환합니다. 이러한 파일 개체에는 다음과 같은 메서드가 있습니다. read(), readline(), write(), tell()seek(). 일부 파일 객체(또는 파일류 객체)에는 여기에 나열된 것보다 더 많은 메서드가 있지만 이것이 가장 일반적입니다. 모든 파일 개체가 모든 파일 메서드를 구현할 필요는 없습니다.

파일을 한 줄씩 읽기

첫 번째 예는 두 가지 프로그래밍 언어인 C와 C++에서 영감을 받았습니다. 아마도 가장 직관적인 접근 방식일 것입니다. 다음을 사용하여 파일을 여십시오. open() 기능, 파일을 한 줄씩 읽기 를 사용하여 readline() 메소드를 읽고 읽은 직후에 라인을 출력합니다.

여기에서 사용 중인 while 계속해서 파일을 읽는 루프 readline() 메서드는 데이터를 계속 반환합니다. 파일의 끝(EOF)에 도달한 경우 while 루프가 멈추고 파일 객체가 닫혀서 다른 프로그램이 사용할 수 있는 리소스가 확보됩니다.


filename = "test.txt"

filehandle = open(filename, 'r')
while True:
    
    line = filehandle.readline()
    if not line:
        break
    print(line)


filehandle.close()

언급했듯이 이 예제에서는 파일을 명시적으로 열고 닫았습니다. Python 인터프리터는 Python 프로그램 실행이 끝날 때 열린 파일을 자동으로 닫지만 다음을 통해 파일을 명시적으로 닫습니다. close() 좋은 프로그래밍 스타일이며 잊지 말아야 합니다.

개선책으로, 편리한 반복자 프로토콜 파이썬 2.3에서 도입되었습니다. 이를 통해 readline 루프 :


filename = "test.txt"
for line in open(filename, 'r'):
    print(line)

여기에서 사용 중인 for 루프와 함께 in 반복자. 현재 라인은 의 도움으로 식별됩니다. in iterator는 파일에서 읽고 그 내용은 다음으로 출력됩니다. stdout. Python은 파일이 범위를 벗어날 때 파일을 열고 닫는 것을 다룹니다. 비효율적이지만 더 이상 파일 핸들을 처리할 필요가 없습니다.

불행히도 위의 코드는 덜 명시적이며 Python의 내부 가비지 수집에 의존하여 파일 닫기를 처리합니다.

Python 2.5에 도입된 with 명령은 전체 프로세스를 훨씬 더 캡슐화하고 범위가 지정된 코드 블록 전체에서 파일 열기 및 닫기를 한 번만 처리합니다.


filename = "test.txt"
with open(filename, 'r') as filehandle:
    for line in filehandle:
        print(line)

의 조합 with 진술 및 open() 명령은 파일을 한 번만 엽니다. 성공하면 for 루프가 실행되고 라인의 내용이 인쇄됩니다. stdout.

또한, 사용 with 진술에는 부작용이 있습니다. 내부적으로 Python 인터프리터는 try-finally-block은 파일에서 읽기를 캡슐화합니다. 다음 예제는 기본적으로 Python에서 내부적으로 일어나는 일을 보여줍니다. with 코드 블록 :

try:
    filehandle = open(filename, 'r')
    
finally:
    filehandle.close()

파일을 줄 덩어리로 읽기

지금까지 파일을 한 줄씩 처리했습니다. 이것은 대용량 파일의 경우 다소 느리고 동시에 여러 줄을 읽음으로써 향상될 수 있습니다. 이를 달성하기 위해, islice() 의 방법 반복 도구 모듈이 작동합니다. 또한 iterator로 작동하고 다음으로 구성된 데이터 청크를 반환합니다. n 윤곽. 파일 끝에서 결과가 더 짧아질 수 있으며 마지막으로 호출은 빈 목록을 반환합니다.

from itertools import islice

filename = "test.txt"

number_of_lines = 5

with open(filename, 'r') as input_file:
    lines_cache = islice(input_file, number_of_lines)
   
    for current_line in lines_cache:
        print (current_line)

파일에서 특정 줄 읽기

위에 표시된 방법을 사용하여 파일에서 특정 줄을 읽는 것과 같은 다른 유용한 작업도 수행할 수 있습니다. 이렇게 하려면 카운터를 사용하고 파일을 반복하는 동안 카운터에 올 때 적절한 줄을 인쇄합니다.


filename = "test.txt"

line_number = 3
print (f"line {line_number} of {filename} is: ")

with open(filename, 'r') as filehandle:
current_line = 1
    for line in filehandle:
        if current_line == line_number:
            print(line)
            break
        current_line += 1

이것은 이해하기 쉬워야 하지만 이전 예제보다 약간 더 깁니다. 사용하여 단축할 수 있습니다. 라인 캐시 기준 치수.

다음 예제는 다음을 사용하여 코드를 단순화하는 방법을 보여줍니다. getline() 방법. 요청한 줄 번호가 파일의 유효한 줄 범위를 벗어나면 getline() 메서드는 대신 빈 문자열을 반환합니다.


import linecache

filename = "test.txt"

line_number = 3

line = linecache.getline(filename, line_number)
print (f"line {line_number} of {filename}:")
print (line)

한 번에 전체 파일 읽기

마지막으로 전체 파일을 한 번에 읽는 이전 예제와 매우 다른 경우를 살펴보겠습니다.

문자는 공간을 너무 많이 차지하지 않지만 큰 파일에 지칠 수 있으므로 대부분의 경우 전체 파일을 읽을 수 있는 충분한 메모리가 있어야 합니다. 다음 예제에서는 다음 조합을 사용합니다. with 성명, 그리고 read() 방법. 이 경우 우리는 다음을 사용할 것입니다. read() 파일 콘텐츠를 데이터 스트림으로 로드하려면:

모범 사례, 업계에서 인정하는 표준 및 포함된 치트 시트가 포함된 Git 학습에 대한 실습 가이드를 확인하십시오. 인터넷 검색 Git 명령을 중지하고 실제로 배움 이것!


filename = "test.txt"

with open(filename, 'r') as filehandle:
    filecontent = filehandle.read()
    print (filecontent)

파이썬은 또한 제공합니다 readlines() 와 유사한 방식이다. readline() 첫 번째 예제의 방법. 대조적으로 read(), 파일 내용은 목록에 저장됩니다. 여기서 내용의 각 행은 항목입니다.


filename = "test.txt"

with open(filename, 'r') as filehandle:
    filecontent = filehandle.readlines()
    for line in filecontent:
        print (line)

DaVinci에는 readlines() EOF에 도달할 때까지 파일에서 콘텐츠를 읽습니다. sizehint 읽을 바이트 수인 매개변수입니다.

결론

평소와 같이 파일 내용을 읽는 방법은 여러 가지가 있습니다. 속도면에서 모두 같은 범주에 속합니다. 귀하에게 가장 적합한 솔루션은 특정 사용 사례에 따라 다릅니다. 우리는 무엇이 가능한지 확인한 다음 가장 적합한 솔루션을 선택하는 것이 매우 도움이 된다고 생각합니다.

Python은 파일 읽기 프로세스를 크게 단순화하지만 때때로 여전히 까다로울 수 있습니다. 이 경우 다음을 살펴보는 것이 좋습니다. 공식 파이썬 문서 자세한 정보입니다.

타임 스탬프 :

더보기 스택카부스