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

时间:2015-04-25 15:44:33

标签: python python-2.7 csv zip gzip

我目前有以下csv编写器类:

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分发中本机可读(不需要可执行文件)的压缩方案。

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

我的问题:是否有一种解决方案可以从两全其美的优势中获益?在最终用户的机器上读取目标格式的工具的广泛可用性,以及附加的能力,而不是一次性写入整个文件?

先谢谢你的考虑!

1 个答案:

答案 0 :(得分:2)

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