본문 바로가기
Python/Python FAQ

Python 파이썬 3에서 파일 내용을 처리할 때 'str'이 아닌 바이트 유사 객체가 필요합니다(TypeError: a bytes-like object is required, not 'str')., "TypeError: a bytes-like object is required, not 'str'" when handling file conten..

by 베타코드 2023. 6. 27.
반응형

질문


나는 매우 최근에 Python 3.5로 이전했다. 이 코드는 Python 2.7에서 제대로 작동했다:

with open(fname, 'rb') as f:
    lines = [x.strip() for x in f.readlines()]

for line in lines:
    tmp = line.strip().lower()
    if 'some-pattern' in tmp: continue
    # ... code

하지만 3.5에서 if 'some-pattern' in tmp: continue 라인에서 오류가 발생하여 다음과 같이 말합니다:

TypeError: a bytes-like object is required, not 'str'

나는 in의 양쪽에 .decode()를 사용하여 문제를 해결할 수 없었으며,

    if tmp.find('some-pattern') != -1: continue

을 사용하여 문제를 해결할 수 없었다. 무엇이 잘못되었고 어떻게 해결할 수 있을까?


답변


바이너리 모드로 파일을 열었습니다:

with open(fname, 'rb') as f:

이는 파일에서 읽은 모든 데이터가 bytes 객체로 반환되며 str이 아님을 의미합니다. 따라서 다음과 같은 문자열을 포함하는 테스트를 사용할 수 없습니다:

if 'some-pattern' in tmp: continue

대신 bytes 객체를 사용하여 tmp과 대조해야합니다:

if b'some-pattern' in tmp: continue

또는 'rb' 모드를 'r'로 바꾸어 파일을 텍스트 파일로 대신 열 수 있습니다.

반응형

댓글