python - 动态压缩字符串并附加到文件

标签 python python-2.7 csv zip gzip

我目前有以下 csv writer 类:

class csvwriter():
    writer = None
    writehandler = None
    @classmethod
    def open(cls,file):
        cls.writehandler = open(file,'wb')
        cls.writer = csv.writer(cls.writehandler, delimiter=',',quotechar='"', quoting=csv.QUOTE_NONNUMERIC)

    @classmethod
    def write(cls,arr):
        cls.writer.writerow(arr)

    @classmethod
    def close(cls):
        cls.writehandler.close()

它可以生成正确的 csv 文件,而无需一次性将完整数组存储在内存中。

但是,通过使用此代码创建的文件可能非常大,因此我希望压缩它们,而不是在未压缩的情况下写入它们。 (为了节省磁盘使用量)。我也无法有效地将文件存储在内存中,因为我预计超过 20GB 的文件会经常出现。

结果文件的接收者通常不是其 PC 的系统管理员,也不都使用 Linux,因此我能够用于此任务的算法类型受到限制。优选地,该解决方案将使用在 Windows、OSX 和任何 Linux 发行版中 native 可读(不需要可执行文件)的压缩方案。

我发现 gzip 在 Python 中提供了一个非常方便的界面,但是在 Windows 中读取 gzip 压缩的文件似乎很麻烦。理想情况下,我会将它们放入 zip 存档中,但 zip 存档不允许您追加数据到存档中已存在的文件,然后迫使我将整个文件存储在内存中,或者将数据写到我能够放入内存的几个较小的文件中。

我的问题:是否有一种解决方案可以两全其美?广泛使用的工具可以在最终用户的计算机上读取目标格式,并且还能够附加而不是一次性写入整个文件?

预先感谢您的考虑!

最佳答案

gzlog可能会提供您正在寻找的功能。它有效地将短字符串附加到 gzip 文件,适用于将短消息附加到长日志的应用程序。

关于python - 动态压缩字符串并附加到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29867288/

相关文章:

python - 在 python 中使用 seaborn 在 pairplot 中显示相关值

python - 如何在python中检测断开连接,而不发送数据

python从xml中读取数据

python 模块 ffpyplayer 显示或显示视频帧到屏幕

python - 推断字段分隔文件信息的库

python - 如何搜索数据框并相应地对每个数据框进行排序?

python - 去掉python字符串中的标点符号

python - 如何合并/连接两个不同长度的 Pandas 数据帧?

python - sed to python替换a中的额外分隔符

Python:csv.Dictreader 列上的额外逗号