전제 조건:
Python은 파일 생성, 쓰기, 읽기를 위한 내장 함수를 제공합니다. 파이썬에서 처리할 수 있는 파일에는 일반 텍스트 파일과 바이너리 파일(바이너리 언어, 0과 1로 작성됨)의 두 가지 유형이 있습니다. 이번 글에서는 파일을 한줄씩 읽는 방법을 공부하겠습니다.
방법 1: readlines()를 사용하여 파일을 한 줄씩 읽기
readlines()는 한 번에 모든 줄을 읽은 다음 각 줄을 목록의 문자열 요소로 반환하는 데 사용됩니다. 이 기능은 전체 파일 내용을 메모리로 읽은 다음 별도의 줄로 분할하므로 작은 파일에 사용할 수 있습니다. 목록을 반복하고 스트립() 함수를 사용하여 줄바꿈 ' ' 문자를 제거할 수 있습니다.
예:
파이썬3
# Python code to> # demonstrate readlines()> L>=> [>'Geeks
'>,>'for
'>,>'Geeks
'>]> # writing to file> file1>=> open>(>'myfile.txt'>,>'w'>)> file1.writelines(L)> file1.close()> # Using readlines()> file1>=> open>(>'myfile.txt'>,>'r'>)> Lines>=> file1.readlines()> count>=> 0> # Strips the newline character> for> line>in> Lines:> >count>+>=> 1> >print>(>'Line{}: {}'>.>format>(count, line.strip()))> |
>
>
산출:
Line1: Geeks Line2: for Line3: Geeks>
주어진 Python 코드의 시간 복잡도는 O(n)입니다. 여기서 n은 파일의 총 라인 수입니다.
코드의 보조 공간 복잡도는 O(n)입니다. 여기서 n은 파일의 총 라인 수입니다.
방법 2: readline()을 사용하여 파일을 한 줄씩 읽기
readline() 함수는 파일의 한 줄을 읽고 문자열 형식으로 반환합니다. 읽을 최대 바이트 수를 지정하는 매개변수 n을 사용합니다. 그러나 n이 행의 길이를 초과하더라도 두 행 이상을 읽지 않습니다. 모든 데이터를 한 번에 가져오는 대신 한 줄씩 가져오기 때문에 대용량 파일을 읽을 때 효율적입니다. readline()은 끝에 개행 문자가 포함된 파일의 다음 줄을 반환합니다. 또한 파일 끝에 도달하면 빈 문자열을 반환합니다.
예:
단계별 접근 방식:
- 개행 문자를 포함하는 세 개의 문자열 요소로 목록 L을 만듭니다.
- 쓰기 모드에서 myfile.txt라는 파일을 열고 이를 file1 변수에 할당합니다.
- 파일 객체 file1의 writelines() 메서드를 사용하여 목록 L의 내용을 파일에 씁니다.
- close() 메서드를 사용하여 파일 객체 file1을 닫습니다.
- 읽기 모드에서 myfile.txt라는 파일을 열고 이를 file1 변수에 할당합니다.
- 변수 개수를 0으로 초기화합니다.
- 무한 루프를 시작합니다.
- 루프가 반복될 때마다 변수 개수를 1씩 증가시킵니다.
- readline() 메서드를 사용하여 파일 객체 file1에서 다음 줄을 읽고 이를 변수 line에 할당합니다.
- line 변수가 비어 있는지 확인하십시오. 비어 있으면 파일의 끝에 도달했다는 의미입니다. 이 경우 break 문을 사용하여 루프를 중단하세요.
- string 클래스의 format() 메소드를 사용하여 count 값과 line 내용을 인쇄합니다. Strip() 메서드는 줄 끝의 개행 문자를 제거하는 데 사용됩니다.
- close() 메서드를 사용하여 파일 객체 file1을 닫습니다.
파이썬3
문자열을 int로 캐스트
# Python program to> # demonstrate readline()> L>=> [>'Geeks
'>,>'for
'>,>'Geeks
'>]> # Writing to a file> file1>=> open>(>'myfile.txt'>,>'w'>)> file1.writelines((L))> file1.close()> # Using readline()> file1>=> open>(>'myfile.txt'>,>'r'>)> count>=> 0> while> True>:> >count>+>=> 1> ># Get next line from file> >line>=> file1.readline()> ># if line is empty> ># end of file is reached> >if> not> line:> >break> >print>(>'Line{}: {}'>.>format>(count, line.strip()))> file1.close()> |
>
>
산출:
Line1 Geeks Line2 for Line3 Geeks>
방법 3: for 루프를 사용하여 파일을 한 줄씩 읽기
파일을 여는 동안 open() 함수에 의해 반복 가능한 객체가 반환됩니다. 파일을 한 줄씩 읽는 마지막 방법에는 루프에서 파일 객체를 반복하는 것이 포함됩니다. 이를 통해 우리는 반복 가능한 객체 사용과 함께 for 루프를 사용하여 암시적으로 파일 객체를 반복할 수 있는 내장 Python 함수를 활용합니다. 이 접근 방식은 더 적은 수의 코드를 사용하므로 항상 따를 가치가 있는 모범 사례입니다.
예:
파이썬3
# Python program to> # demonstrate reading files> # using for loop> L>=> [>'Geeks
'>,>'for
'>,>'Geeks
'>]> # Writing to file> file1>=> open>(>'myfile.txt'>,>'w'>)> file1.writelines(L)> file1.close()> # Opening file> file1>=> open>(>'myfile.txt'>,>'r'>)> count>=> 0> # Using for loop> print>(>'Using for loop'>)> for> line>in> file1:> >count>+>=> 1> >print>(>'Line{}: {}'>.>format>(count, line.strip()))> # Closing files> file1.close()> |
>
>
산출:
Using for loop Line1: Geeks Line2: for Line3: Geeks>
방법 4: for 루프 및 목록 이해를 사용하여 한 줄씩 파일 읽기
리스트 컴프리헨션은 각 요소를 반복하는 for 루프와 함께 각 요소에 대해 실행되는 표현식을 포함하는 대괄호로 구성됩니다. 여기서는 텍스트 파일을 읽고 새 줄 문자를 포함한 원시 데이터를 다른 출력에 인쇄합니다. 목록에서 새 줄 문자를 모두 제거했습니다.
예
파이썬3
with>open>(>'myfile.txt'>) as f:> >lines>=> [line>for> line>in> f]> print>(lines)> # removing the new line characters> with>open>(>'myfile.txt'>) as f:> >lines>=> [line.rstrip()>for> line>in> f]> print>(lines)> |
>
>
산출:
['Geeks ', 'For ', 'Geeks'] ['Geeks', 'For', 'Geeks']>
진술 포함
위의 접근 방식에서는 파일을 열 때마다 명시적으로 닫아야 합니다. 파일을 닫는 것을 잊어버리면 코드에 여러 가지 버그가 발생할 수 있습니다. 즉, 파일을 제대로 닫을 때까지 파일의 많은 변경 사항이 적용되지 않습니다. 이를 방지하기 위해 with 문을 사용할 수 있습니다. Python의 With 문은 예외 처리에 사용되어 코드를 더욱 깔끔하고 읽기 쉽게 만듭니다. 파일 스트림과 같은 공통 리소스의 관리를 단순화합니다. with 문을 사용하여 코드를 더욱 깔끔하게 만드는 방법에 대한 다음 코드 예제를 살펴보세요. 문과 함께 사용할 때는 file.close()를 호출할 필요가 없습니다. with 문 자체는 리소스의 적절한 획득 및 해제를 보장합니다.
예:
파이썬3
# Python program to> # demonstrate with> # statement> L>=> [>'Geeks
'>,>'for
'>,>'Geeks
'>]> # Writing to file> with>open>(>'myfile.txt'>,>'w'>) as fp:> >fp.writelines(L)> # using readlines()> count>=> 0> print>(>'Using readlines()'>)> with>open>(>'myfile.txt'>) as fp:> >Lines>=> fp.readlines()> >for> line>in> Lines:> >count>+>=> 1> >print>(>'Line{}: {}'>.>format>(count, line.strip()))> # Using readline()> count>=> 0> print>(>'
Using readline()'>)> with>open>(>'myfile.txt'>) as fp:> >while> True>:> >count>+>=> 1> >line>=> fp.readline()> >if> not> line:> >break> >print>(>'Line{}: {}'>.>format>(count, line.strip()))> # Using for loop> count>=> 0> print>(>'
Using for loop'>)> with>open>(>'myfile.txt'>) as fp:> >for> line>in> fp:> >count>+>=> 1> >print>(>'Line{}: {}'>.>format>(count, line.strip()))> |
우선순위 큐 자바
>
>
산출:
Using readlines() Line1: Geeks Line2: for Line3: Geeks Using readline() Line1: Geeks Line2: for Line3: Geeks Using for loop Line1: Geeks Line2: for Line3: Geeks>