반응형

 

 

 

파이썬 초보가 뚝딱뚝딱해보다 맞닥뜨린 오류

 

TypeError: write() argument must be str, not BeautifulSoup

문장만 읽어도 뭔가의 자료형 문제인가보다 싶어서 저 문제를 해결한 사람들의 답변을 따라해봄

 

print( str(bs4에서 가져온내용) )

 

이렇게 str으로 기존 출력 내용을 감싸서 출력을 했는데 이제는

 

'cp949' codec can't encode character '\xa0' in position 144794: illegal multibyte sequence

이런 오류로 진화했다

 

오류에 언급되어 있는것처럼,

출력 시 인코딩 문제인듯 싶어서 utf-8 인코딩 방식을 추가해준 방법을 따라해봤다

 

f = open("F:/kotraTest.txt",'wb')
f.write(soup.encode('utf-8'))
f.close()

또는

f = open("F:/kotraTest.txt",'w',encoding='utf-8')
f.write(str(soup))
f.close()

이렇게 되면 문제가 해결된다

 

 

 

이 방법들로 웹페이지 내용을 텍스트파일로 저장할 수 있었는데,

두가지 방법의 차이점이 문득 궁금해져서 각각의 방식으로 저장한 파일을 열어 라인 바이 라인으로 비교해봄

 

결과 값의 차이는 바이트 방식으로 파일을 저장한 두번째 방법이 enter가 한번씩 쳐져

좀더 간결한 텍스트 파일로 저장이 가능하다는 거였다

 

 

+추가로 파라미터로 사용한 wb에 대해 찾아봤더니

w는 read, write에서의 파일에 새로운 내용을 작성하거나 변경하는 등의 쓰기 기능을 수행할 때 사용하며

b는 이진파일인 binary file을 write 할때 지정해주어야 한다 함

 

대충 윈도우에서의 파이썬은 텍스트와 바이너리 파일을 구분 짓기위해 데이터를 읽거나 쓸 때,

자동으로 파일의 마지막 부분에 변화를 준다고 함

 

Binary files (이진 파일)이란,

사람이 읽을 수 없는 문자들로 이루어진 모든 파일들을 의미한다

 

JPEG, GIF 들과같은 이미지파일 일수도있고, MP3, PDF나 워드 파일과 같이 이진 문서 형식일 수 도있다

 

파이썬에서는 기본적으로 텍스트모드로 파일들을 오픈하며

바이너리 모드같이 특정 모드에서 파일을 사용하기 위해서는, wb와 같이 'b 문자'를 붙여 사용해야한다

 

 

 

 

결국 찾아본 내용을 합해보면 wb에서 b는 바이너리 모드에서 파일을 쓰기 모드로 사용한 것인데

나는 텍스트파일에 저장을 한것이므로 나의 방식에서는 w만으로 충분한듯

 

 

반응형

+ Recent posts