반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 리눅스
- Crawling
- 알고리즘
- 빅데이터
- pandas
- VAE
- pytorch
- 우분투
- 강화학습
- uncertainty
- DATA
- 데이터분석
- selenium
- 코딩테스트
- YarinGal
- bayesian
- AI
- 논문리뷰
- 크롤링
- PYTHON
- dropout
- R
- 불확실성
- 텍스트분석
- GNN
- 백준
- Graph
- 텍스트마이닝
- 베이지안
- 파이썬
Archives
- Today
- Total
끄적거림
[Tips] byte, str 타입 오류(feat. TypeError: write() argument must be str, not bytes) 본문
Python
[Tips] byte, str 타입 오류(feat. TypeError: write() argument must be str, not bytes)
Signing 2020. 2. 21. 11:10728x90
반응형
일반적으로 python3의 내장함수인 open( ) 함수를 사용할 때 주의할 점이 있다.
open( )함수는 기본적으로 UTF-8인코딩 방법을 사용한다.
예를 들어 다음의 코드를 실행시키려 한다.
with open('C:/Users/DAL/Desktop/test.txt', 'w') as f:
f.write(os.urandom(10))
(※ os.urandom( ) 함수는 원하는 길이(byte단위)의 unsigned 수치값을 만들어 준다.)
그럼 다음과 같은 에러코드가 발생한다.
왜 이런 에러가 발생할까?
python3에는 크게 2가지 문자 sequence 타입이 있다.
- bytes : raw 8-bit(=binary)
- str : Unicode
좀 더 원시적인(?) 타입이 bytes가 되겠고 이를 보기 쉽게(?) 표현한 것이 str 타입이 되겠다.
Unicode를 binary데이터로 표현하는 방법 중 가장 흔하고 많이 쓰이는 방식이 바로 UTF-8 인코딩 방법이다.
만약, Unicode --> Binary 로 바꾸고 싶다면 encode( ) 함수를 사용해야하고,
Binary --> Unicode 로 바꾸고 싶다면 decode( ) 함수를 사용해야한다.
여기서 해결 방법은 다음 코드와 같다.
with open('C:/Users/DAL/Desktop/test2.txt', 'wb') as f:
f.write(os.urandom(10))
'wb' 모드로 바꾸어 실행하면 정상 작동한다.
※ 'w' : 문자 쓰기 모드, 'wb' : 바이너리 쓰기 모드
728x90
반응형
'Python' 카테고리의 다른 글
[API]기상청 api로 데이터 가져오기 2 in Python(feat. 동네예보 - 초단기실황) (1) | 2020.02.29 |
---|---|
[API] 영화진흥위원회 제공 박스오피스 API 사용 (0) | 2020.02.28 |
[Tips] 컴프리헨션(Comprehension), 이터레이터(Iterator), 제너레이터(Generator) (0) | 2020.02.21 |
[API]네이버데이터랩 api로 데이터 가져오기 in Python (0) | 2020.02.19 |
[API]기상청 api로 데이터 가져오기 in Python(feat. ASOS 종관기상관측) (0) | 2020.02.18 |
Comments