반응형
질문
파이썬에서 이진 파일을 읽고 해당 파일의 각 바이트를 반복하는 방법은 무엇인가요?
답변
파이썬 >= 3.8
왈러스 연산자 (:=
) 덕분에 솔루션이 꽤 짧습니다. 파일에서 bytes
객체를 읽고 변수 byte
에 할당합니다.
with open("myfile", "rb") as f:
while (byte := f.read(1)):
# 바이트로 작업 수행.
파이썬 >= 3
이전 파이썬 3 버전에서는 약간 더 자세한 방법을 사용해야 합니다:
with open("myfile", "rb") as f:
byte = f.read(1)
while byte != b"":
# 바이트로 작업 수행.
byte = f.read(1)
혹은 benhoyt이 말한 대로, 같지 않음을 건너뛰고 b""
이 거짓으로 평가되는 사실을 이용할 수 있습니다. 이렇게 하면 2.6과 3.x 사이에서 코드를 변경하지 않고 호환성을 유지할 수 있습니다. 또한 바이트 모드에서 텍스트 모드로 또는 그 반대로 전환할 경우 조건을 변경하지 않아도 됩니다.
with open("myfile", "rb") as f:
byte = f.read(1)
while byte:
# 바이트로 작업 수행.
byte = f.read(1)
파이썬 >= 2.5
파이썬 2에서는 약간 다릅니다. 여기서는 바이트 객체가 아니라 원시 문자를 얻습니다:
with open("myfile", "rb") as f:
byte = f.read(1)
while byte != "":
# 바이트로 작업 수행.
byte = f.read(1)
주의할 점은 with 문이 2.5 버전 이하의 파이썬에서 사용할 수 없다는 것입니다. 2.5에서 사용하려면 다음을 가져와야 합니다:
from __future__ import with_statement
2.6에서는 이것이 필요하지 않습니다.
파이썬 2.4 및 이전 버전
f = open("myfile", "rb")
try:
byte = f.read(1)
while byte != "":
# 바이트로 작업 수행.
byte = f.read(1)
finally:
f.close()
반응형
댓글