我目前有以下 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/