相关疑难解决方法(0)

Python 3,从/向gzip文件读/写压缩的json对象

对于Python3,我跟着@Martijn Pieters的代码:

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')
Run Code Online (Sandbox Code Playgroud)

但这会导致错误:

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'
Run Code Online (Sandbox Code Playgroud)

关于发生了什么的任何想法?

json gzip python-3.x

27
推荐指数
2
解决办法
3万
查看次数

json.dump到python 3中的gzip文件

我试图在一个步骤中将对象写入gzip压缩的json文件(最小化代码,并可能节省内存空间).我最初的想法(python3)是这样的:

import gzip, json
with gzip.open("/tmp/test.gz", mode="wb") as f:
  json.dump({"a": 1}, f)
Run Code Online (Sandbox Code Playgroud)

然而TypeError: 'str' does not support the buffer interface,这失败了:我认为这与字符串没有被编码为字节有关.那么这样做的正确方法是什么?

我不满意的当前解决方案:

以文本模式打开文件可以解决问题:

import gzip, json
with gzip.open("/tmp/test.gz", mode="wt") as f:
  json.dump({"a": 1}, f)
Run Code Online (Sandbox Code Playgroud)

但是我不喜欢文本模式.在我看来(也许这是错误的,但受此支持),文本模式用于修复行尾.这不应该是一个问题,因为json没有行结尾,但我不喜欢它(可能)搞乱我的字节,它(可能)更慢,因为它正在寻找行结束来修复,并且(最坏的)所有)我不明白为什么关于行结尾的东西修复了我的编码问题?

python-3.x

13
推荐指数
1
解决办法
2792
查看次数

标签 统计

python-3.x ×2

gzip ×1

json ×1