파이썬에서 파일을 한 줄씩 읽는 방법
-
파이썬에서 파일을 한 줄씩 읽는
readlines
- 파일 메소드를 반복하여 파이썬에서 한 줄씩 파일을 읽습니다
-
파이썬에서 파일을 한 줄씩 읽는
file.read
메소드 - 파이썬에서 파일을 한 줄씩 읽는 여러 가지 방법 비교
아래 내용이 담긴 파일이 있다고 가정 해 봅시다.
Line One: 1
Line Two: 2
Line Three: 3
Line Four: 4
Line Five: 5
파일 내용을 한 줄씩[ "1 행 : 1", "2 행 : 2", "3 행 : 3", "4 행 : 4", "5 행 : 5"목록으로 읽어야합니다. ]
.
아래 목록에서 파일을 한 줄씩 읽는 다양한 방법을 소개합니다.
파이썬에서 파일을 한 줄씩 읽는 readlines
readlines
는 스트림에서 행 목록을 반환합니다.
>>> filePath = r"/your/file/path"
>>> with open(filePath, 'r', encoding='utf-8') as f:
f.readlines()
['Line One: 1\n', 'Line Two: 2\n', 'Line Three: 3\n', 'Line Four: 4\n', 'Line Five: 5']
마지막 문자\n
도 문자열에 포함되며 str.rstrip('\n')
으로 제거 할 수 있습니다.
>>> with open(filePath, 'r', encoding='utf-8') as f:
[_.rstrip('\n') for _ in f.readlines()]
['Line One: 1', 'Line Two: 2', 'Line Three: 3', 'Line Four: 4', 'Line Five: 5']
파일 메소드를 반복하여 파이썬에서 한 줄씩 파일을 읽습니다
우리는 readlines
를 사용하지 않고 파일을 반복해서 한 줄씩 읽을 수 있습니다.
>>> with open(filePath, 'r', encoding='utf-8') as f:
[_.rstrip('\n') for _ in f]
['Line One: 1', 'Line Two: 2', 'Line Three: 3', 'Line Four: 4', 'Line Five: 5']
이 방법은 메모리 사용 관점에서 위의 방법보다 훨씬 낫습니다. readlines
메소드는 메모리에 파일의 모든 라인을 보유하지만 interation 메소드는 파일 컨텐츠의 한 라인 만 메모리에 가져 와서 처리합니다. MemoryError
를 피하기 위해 파일 크기가 매우 큰 경우가 바람직합니다.
파이썬에서 파일을 한 줄씩 읽는 file.read
메소드
file.read(size=-1, /)
는 size
가 설정되어 있지 않으면 EOF 까지 파일에서 읽습니다. str.splitlines
함수를 사용하여 선을 분리 할 수 있습니다.
>>> with open(filePath, 'r') as f:
f.read().splitlines()
['Line One: 1', 'Line Two: 2', 'Line Three: 3', 'Line Four: 4', 'Line Five: 5']
결과는 기본 str.splitlines
메소드에 종료 문자\n
을 포함하지 않습니다. keepends
매개 변수가 True
로 설정되어 있으면\n
을 포함시킬 수 있습니다.
>>> with open(filePath, 'r') as f:
f.read().splitlines(keepends=True)
['Line One: 1\n', 'Line Two: 2\n', 'Line Three: 3\n', 'Line Four: 4\n', 'Line Five: 5']
파이썬에서 파일을 한 줄씩 읽는 여러 가지 방법 비교
이 기사에서 소개 한 여러 방법 중 효율성 성능을 비교해 보겠습니다. 성능 차이를 쉽게 비교하기 위해 테스트 된 파일의 줄 수를 8000
으로 늘립니다.
>>> timeit.timeit('''with open(filePath, 'r', encoding='utf-8') as f:
f.readlines()''',
setup='filePath=r"C:\Test\Test.txt"',
number = 10000)
16.36330720000001
>>> timeit.timeit('''with open(filePath, 'r', encoding='utf-8') as f:
[_ for _ in f]''',
setup='filePath=r"C:\Test\Test.txt"',
number = 10000)
18.37279060000003
>>> timeit.timeit('''with open(filePath, 'r', encoding='utf-8') as f:
f.read().splitlines()''',
setup='filePath=r"C:\Test\Test.txt"',
number = 10000)
12.122660100000019
readlines()
메소드는 파일 반복 메소드보다 훨씬 우수하며 file.read().splitlines()
는 다른 두 메소드에 비해 25 % 이상의 마진을 갖는 가장 효율적인 메소드입니다.
그러나 메모리가 제약 조건 인 BigData
애플리케이션에서 파일 반복 방법이 위에 설명 된대로 최상입니다.
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook