相关疑难解决方法(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万
查看次数

Windows上python中二进制和文本I/O之间的区别

我知道我应该使用打开二进制文件,"rb"而不是"r"因为Windows对二进制文件和非二进制文件的行为不同.

但是我不明白如果我以错误的方式打开文件会发生什么,以及为什么这种区别甚至是必要的.其他操作系统似乎通过同时处理两种文件来做得很好.

python windows file-io file

19
推荐指数
2
解决办法
5288
查看次数

有没有办法将`json.dump`和`gzip`一起使用?

是有关如何json.dumps用于写入gzip文件的绝佳答案。我想做的是使用dump方法代替直接将json序列化为GzipFile对象。

示例代码:

import gzip, json

data = # a dictionary of data here
with gzip.open(write_file, 'w') as zipfile:
   json.dump(data, zipfile)
Run Code Online (Sandbox Code Playgroud)

引发的错误是

TypeError: memoryview: a bytes-like objet is required, not 'str'
Run Code Online (Sandbox Code Playgroud)

我相信是由于gzip write()方法想要将字节对象传递给它而引起的。根据文档

json模块总是产生str对象,而不是byte对象。因此,fp.write()必须支持str输入。

有没有一种方法来包装json串输出为字节,这样GzipFilewrite()将处理它?还是使用该方法json.dumps并将encode()结果字符串转换为bytes对象的唯一方法,如其他链接的答案一样?

python json gzip python-3.x

4
推荐指数
1
解决办法
2833
查看次数

标签 统计

gzip ×2

json ×2

python ×2

python-3.x ×2

file ×1

file-io ×1

windows ×1