我正在try 将数据(包含在DICT中)写入压缩的(GZIP)CSV文件.据我所知,gzip.GzipFile方法应该将写操作作为一个普通的文件对象接受.例如:

   import gzip
   import csv

   with gzip.GzipFile(filename="test.csv.gz", mode="a") as gziphdlr:
       writer = csv.DictWriter(gziphdlr, fieldnames=['time','value'])
       writer.writeheader()
       writer.writerow({'time': 0.1, "value": 100})
       writer.writerow({'time': 0.2, "value": 200})

但是,我得到了一个错误:

  ...
  File "/usr/lib/python3.10/csv.py", line 154, in writerow 
    return self.writer.writerow(self._dict_to_list(rowdict))
  File "/usr/lib/python3.10/gzip.py", line 285, in write
    data = memoryview(data)
  TypeError: memoryview: a bytes-like object is required, not 'str'

有什么建议我可能错了吗?

非常感谢!

推荐答案

您必须使用类似TextIOWrapper的缓冲文本流:

import gzip
import csv
import io

# Take care using append mode to not write headers multiple times
with gzip.GzipFile(filename='test.csv.gz', mode='w') as gzip:
    buf = io.TextIOWrapper(gzip, write_through=True)
    writer = csv.DictWriter(buf, fieldnames=['time', 'value'])
    writer.writeheader()
    writer.writerow({'time': 0.1, 'value': 100})
    writer.writerow({'time': 0.2, 'value': 200})

try 使用Pandas加载数据:

import pandas as pd

df = pd.read_csv('test.csv.gz')
print(df)

# Output
   time  value
0   0.1    100
1   0.2    200

Python相关问答推荐

Image Font生成带有条形码Code 128的条形码时出现枕头错误OSErsor:无法打开资源

jit JAX函数中的迭代器

如何计算列表列行之间的公共元素

在Pandas 日历中插入一行

对某些列的总数进行民意调查,但不单独列出每列

在Google Colab中设置Llama-2出现问题-加载判断点碎片时Cell-run失败

基于字符串匹配条件合并两个帧

如何从数据库上传数据到html?

在vscode上使用Python虚拟环境时((env))

多指标不同顺序串联大Pandas 模型

在嵌套span下的span中擦除信息

无论输入分辨率如何,稳定扩散管道始终输出512 * 512张图像

lityter不让我输入左边的方括号,'

LocaleError:模块keras._' tf_keras. keras没有属性__internal_'''

重置PD帧中的值

Numpyro AR(1)均值切换模型抽样不一致性

Polars Group by描述扩展

使用字典或列表的值组合

统计numpy. ndarray中的项目列表出现次数的最快方法

如何在Python中自动创建数字文件夹和正在进行的文件夹?