본문 바로가기
Python

[python] Text mode vs. Binary mode: File open

by ds31x 2024. 1. 15.

Python에서 특정 파일을 open하는 경우,

text mode 또는 binary mode 중 하나로 열게 된다.

 

이 둘의 차이점은 간단히 설명하면,

현재 open하고자 하는 file을 text파일로 처리할지
아니면 binary파일로 처리할지를 결정하는 것임.


binary mode 로 file을 여는 경우,

  • Python은 해당 file을 순수한 bytes의 형태로 취급함.
  • 해당 파일을 byte 단위로 읽어들이면서
  • 어떠한 변환없이 file에 기재된 bytes 의 값들을 그대로 읽어들임.

text mode로 file을 여는 경우,

  • 사람이 읽을 수 있는 문자들로 구성된 text file이라고 생각하며,
  • file의 bytes 값들을 사람이 읽을 수 있는 문자로 표시 하기 위한 encoding 방식에 따라 bytes를 처리함.
  • 때문에 text mode로 file 을 open하는 경우, 사용할 encoding 방식이 지정되게 됨 (생략된 경우엔 기본 encoding이 사용됨)

참고

text mode로 file을 여는 데, encoding 방식에서 지정되지 않은 값을 가지는 bytes가 있을 경우

  • UnicodeDecodeError 가 발생하여 file을 열 수 없다.
  • 단, errors='ignore'로 지정하여 open을 할 경우엔 해당 bytes들을 무시한다.

Example

이 예제 코드는 binary mode 와 text mode 의 차이를 보여준다.

아래의 예에서 ascii 인코딩에서 지원하는 a, b 사이에 2 bytes의 0x80, 0x81를 파일에 기재함.

  • null 문자와 다른 점을 비교하기 위해
  • 인코딩을 지원하지 않는 0x800x81 사이에
  • ascii 인코딩에서 null 문자에 해당하는 0x00을 2개 기재함.
np_c = bytes([128])
np_c_str = np_c.decode('ascii',errors='ignore')
np_c1 = bytes([129])
np_c1_str = np_c.decode('ascii',errors='ignore')
null_c = bytes([0])
null_str = null_c.decode('ascii', errors='ignore')

with open('bin2txt.txt', 'wb') as f:
    f.write('a'.encode('ascii'))
    f.write(np_c)
    f.write(null_c)
    f.write(null_c)
    f.write(np_c1)
    f.write('b'.encode('ascii'))

해당 파일은 txt 확장자임에도 ascii 인코딩에서 지원하지 않는 2 bytes의 데이터를 가지고 있는 꼴임.

  • 전체 사이즈는 6바이트 임.

이를 python에서 text파일모드로 읽어들일 경우, 해당 bytes에 대한 출력이 이루어지지 않음을 확인할 수 있으며, binary mode 로 읽을 경우 각 바이트의 값을 제대로 읽어들임을 알 수 있음.

with open('bin2txt.txt', 'rt', encoding='ascii', errors='ignore') as f:
    while True:
        a = f.read(1)
        if not a :
            break
        print(f'[{a}]')

# output은 다음과 같음.
# [a]
# []
# []
# [b]

#---------------------------------

with open('bin2txt.txt', 'rb', ) as f:
    while True:
        a = f.read(1)
        if not a :
            break
        print(f'[{a}]')

# output은 다음과 같음.
# [b'a']
# [b'\x80']
# [b'\x00']
# [b'\x00']
# [b'\x81']
# [b'b']

Python에서

text mode로 읽어들일 경우, 읽어들인 데이터의 type이 str이고,

binary mode 로 읽어들일 경우 bytes임.


참고자료

좀더 자세한 text 파일과 binary 파일의 차이점(text 파일 위주)은 다음 글을 참고할 것.

2024.01.07 - [분류 전체보기] - [CE] Text file : Text 파일이란?

 

[CE] Text file : Text 파일이란?

"text file" 은 사람과 컴퓨터가 읽을 수 있고 처리할 수 있도록 encoding 된 characters 로 이루어진 electric text lines 로 구성되는 형태의 파일 포맷 및 해당 파일을 가르킴. 특징. text file 이 가지는 다양한

ds31x.tistory.com

2023.12.05 - [Python] - [Python] File Handling

 

[Python] File Handling

File 열고 닫기. 2023.07.04 - [Python] - [Python] file : open and close [Python] file : open and close Python 에서 file을 처리하기 위해선 다른 프로그래밍 언어와 마찬가지로 file에 대한 접근이 가능한 object를 얻어와

ds31x.tistory.com

 

728x90