Python에서 파일의 현재 줄 번호 확인하기
Python은 파일 객체에 대해 현재 줄 번호를 직접 알려주는 기능을 기본적으로 제공하지 않습니다. 하지만 래퍼(wrapper) 클래스를 작성하면 손쉽게 구현할 수 있습니다.
래퍼 클래스를 사용한 방법
파일 객체를 감싸는 클래스를 만들고, readline() 메서드가 호출될 때마다 줄 번호를 1씩 증가시키는 방식입니다.
class FileLineWrapper(object):
def __init__(self, file):
self.f = file
self.line = 0
def close(self):
return self.f.close()
def readline(self):
self.line += 1
return self.f.readline()
# 'with' 문에서 사용할 수 있도록 지원
def __enter__(self):
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self.close()위 클래스는 다음과 같이 사용할 수 있습니다.
f = FileLineWrapper(open("my_file", "r"))
f.readline()
print(f.line)실행 결과는 다음과 같습니다.
1__enter__와 __exit__ 메서드를 함께 정의했기 때문에, 이 클래스는 with 문과 함께 사용해 파일이 자동으로 닫히도록 처리할 수도 있습니다.
enumerate()를 활용한 간단한 방법
readline()만 사용하는 경우라면, 내장 함수 enumerate()를 활용해 더 간결하게 줄 번호를 추적할 수 있습니다.
f = open("my_file", "r")
for line_no, line in enumerate(f):
print(line_no)
f.close()이 방법은 파일을 한 줄씩 순회하면서 각 줄의 인덱스(0부터 시작)를 함께 얻어옵니다. 줄 번호를 1부터 표시하고 싶다면 enumerate(f, start=1)처럼 start 매개변수를 지정하면 됩니다.
정리
- Python은 현재 줄 번호를 기본으로 제공하지 않으므로 직접 관리해야 합니다.
- 랜덤 액세스나 세밀한 제어가 필요하면 래퍼 클래스 방식이 적합합니다.
- 파일 전체를 순서대로 읽는 경우에는
enumerate()를 사용하는 것이 가장 간단하고 파이썬다운 방법입니다.