반응형
질문
나는 매우 최근에 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'
로 바꾸어 파일을 텍스트 파일로 대신 열 수 있습니다.
반응형
댓글