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

2024-10-01 09:28:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前有以下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发行版中本机可读(不需要可执行文件)的压缩方案。在

我发现gzip在Python中提供了一个非常方便的接口,但是在windows中读取gzip文件似乎很麻烦。。理想情况下,我会将它们放在zip存档中,但zip archive不允许您将数据附加到存档中已经存在的文件中,这会迫使我将整个文件存储在内存中,或者将数据写入几个我可以放入内存的较小文件中。在

我的问题是:有没有一个既能从两个世界中获益的解决方案呢?而不是附加到整个机器上的文件的可用性,而不是一个可以广泛使用的文件格式?在

提前感谢您的考虑!在


Tags: 文件csv内存nonecloselinuxdefopen