반응형
import gzip
import json
# writing
with gzip.GzipFile(jsonfilename, 'w') as fout:
for i in range(N):
uid = "whatever%i" % i
dv = [1, 2, 3]
data = json.dumps({
'what': uid,
'where': dv})
fout.write(data + '\n')
그러나 이로 인해 오류가 발생합니다.
Traceback (most recent call last):
...
File "C:\Users\Think\my_json.py", line 118, in write_json
fout.write(data + '\n')
File "C:\Users\Think\Anaconda3\lib\gzip.py", line 258, in write
data = memoryview(data)
TypeError: memoryview: a bytes-like object is required, not 'str'
무슨 일이 일어나고 있는지에 대한 생각이 있습니까?
해결 방법
여기에 4 단계의 변형이 있습니다.
따라서 이러한 단계를 하나씩 수행해 보겠습니다.
import gzip
import json
data = []
for i in range(N):
uid = "whatever%i" % i
dv = [1, 2, 3]
data.append({
'what': uid,
'where': dv
}) # 1. data
json_str = json.dumps(data) + "\n" # 2. string (i.e. JSON)
json_bytes = json_str.encode('utf-8') # 3. bytes (i.e. UTF-8)
with gzip.GzipFile(jsonfilename, 'w') as fout: # 4. gzip
fout.write(json_bytes)
여기서 "\ n"
을 추가하는 것은 완전히 불필요합니다. 그것은 아무것도 부수 지 않지만 그 이상으로는 쓸모가 없습니다. 코드 샘플에 포함되어 있기 때문에 추가했습니다.
읽기는 정확히 다른 방식으로 작동합니다.
with gzip.GzipFile(jsonfilename, 'r') as fin: # 4. gzip
json_bytes = fin.read() # 3. bytes (i.e. UTF-8)
json_str = json_bytes.decode('utf-8') # 2. string (i.e. JSON)
data = json.loads(json_str) # 1. data
print(data)
물론 단계를 결합 할 수 있습니다.
with gzip.GzipFile(jsonfilename, 'w') as fout:
fout.write(json.dumps(data).encode('utf-8'))
과
with gzip.GzipFile(jsonfilename, 'r') as fin:
data = json.loads(fin.read().decode('utf-8'))
참조 페이지 https://stackoverflow.com/questions/39450065
반응형
'파이썬' 카테고리의 다른 글
파이썬 Python의 목록에 대해 사용자 입력 테스트 (0) | 2020.10.30 |
---|---|
파이썬에서 int를 문자열로 캐스팅 (0) | 2020.10.30 |
파이썬 dtype ( 'O')에서 dtype ( 'float64')으로 배열 데이터를 캐스트 할 수 없습니다. (0) | 2020.10.30 |
파이썬 python urllib2는 웹 페이지에서 가져온 gzip 데이터를 자동으로 압축 해제합니까? (0) | 2020.10.30 |
파이썬 Python if 문 : False 대 0.0 (0) | 2020.10.30 |
댓글