【发布时间】:2015-04-25 15:44:33
【问题描述】:
我目前有以下 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 存档不允许您附加将数据复制到存档中已经存在的文件中,然后迫使我将整个文件存储在内存中,或者将数据写入我能够放入内存中的几个较小的文件中。
我的问题:有没有一种可以两全其美的解决方案?在最终用户的机器上读取目标格式的工具的广泛可用性,以及追加而不是一次性写入整个文件的能力?
提前感谢您的考虑!
【问题讨论】:
-
为什么您认为必须将所有数据存储在内存中才能写入?使用类来做你正在做的事情也没有多大意义
-
嗨 Padraic,关于课程的观点很公平。我偶然注意到我的代码包含 gzip.open 函数,我打算提供没有压缩的幼稚版本。 Gzip 是可用的,但非 Linux 用户很难解压缩(需要可执行文件,我的最终用户可能不一定有权访问)。
-
我找到了以下博客文章 - swl10.blogspot.nl/2012/12/… - 我会尝试看看这是否是一条富有成效的道路。
-
有一个 lib 可以跨平台使用 zip 文件,如果我能想到名称,我会告诉你。您基本上可以模仿他们正在为您工作的工作。
-
我以后会有一个根,前段时间我在找相关的东西时看到了它。
标签: python python-2.7 csv zip gzip