作者:hcl春丽 | 来源:互联网 | 2023-05-22 19:58
我想直接从Google Cloud Storage读取压缩文件,并使用Python csv包打开它们.本地文件的代码是:
def reader(self):
print "reading local compressed file: ", self._filename
self._localfile = gzip.open(self._filename, 'rb')
csvReader = csv.reader(self._localfile, delimiter=',', quotechar='"')
return csvReader
我玩了几个GCS API(基于JSON,cloud.storage),但它们似乎都没有给我一些我可以通过gzip流式传输的东西.更重要的是,即使文件未压缩,我也无法打开文件并将其提供给cv.reader(Iterator类型).
我的压缩CSV文件大约为500MB,而未压缩的文件最多使用几GB.我不认为这是一个好主意:1 - 在打开文件之前本地下载文件(除非我可以重叠下载和计算)或2 - 在计算之前将其完全打开在内存中.
最后,我当前在我的本地机器上运行此代码,但最终,我将转移到AppEngine,所以它也必须在那里工作.
谢谢!!
1> Alex Martell..:
使用GCS,cloudstorage.open(filename, 'r')
将为您提供一个只读文件类对象(之前创建的类似但有'w'
:-),您可以使用,一次一个块,使用标准Python库的zlib模块,特别是zlib.decompressobj
当然,如果GS对象最初是以互补的方式创建的(带有a zlib.compressobj
).
或者,为方便起见,您可以使用标准Python库的gzip模块,例如用于阅读阶段,例如:
compressed_flo = cloudstorage.open('objname', 'r')
uncompressed_flo = gzip.GzipFile(fileobj=compressed_flo,mode='rb')
csvReader = csv.reader(uncompressed_flo)
当然,对于早期的写作阶段,反之亦然.
请注意,当您在本地运行时(使用dev_appserver),GCS客户端库使用本地磁盘文件来模拟GCS - 根据我的经验,这有利于开发目的,gsutil
当我需要与"真实"交互时,我可以使用或使用其他工具来自我本地工作站的GCS存储... GCS适用于我需要从我的GAE应用程序进行此类交互时(以及首先在本地开发所述GAE应用程序:-).