본문 바로가기
Python/Python FAQ

Python 이진 파일을 읽고 각 바이트를 반복하는 것. [중복], Reading binary file and looping over each byte [duplicate]

by 베타코드 2023. 11. 24.
반응형

질문


파이썬에서 이진 파일을 읽고 해당 파일의 각 바이트를 반복하는 방법은 무엇인가요?


답변


파이썬 >= 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()
반응형

댓글