ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – 从谷歌云存储流式传输gzip压缩文件

2019-07-17 15:58:06  阅读:324  来源: 互联网

标签:python csv google-app-engine google-cloud-storage


我想直接从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,所以它也必须在那里工作.

谢谢!!

解决方法:

使用GCS,cloudstorage.open(文件名,’r’)将为您提供一个只读文件类对象(之前创建的类似,但使用’w’:-),您可以使用,一次一块,标准Python库的zlib module,特别是zlib.decompressobj,当然,如果GS对象最初是以互补的方式创建的(使用zlib.compressobj).

或者,为方便起见,您可以使用标准Python库gzip module,例如读取阶段,例如:

compressed_flo = cloudstorage.open('objname', 'r')
uncompressed_flo = gzip.GzipFile(fileobj=compressed_flo,mode='rb')
csvReader = csv.reader(uncompressed_flo)

当然,对于早期的写作阶段,反之亦然.

请注意,当您在本地运行时(使用dev_appserver),GCS客户端库使用本地磁盘文件来模拟GCS – 根据我的经验,这对于开发目的很有用,并且当我需要与“real”进行交互时,我可以使用gsutil或其他工具“我本地工作站的GCS存储… GCS适用于我需要从我的GAE应用程序进行此类交互时(以及首先在本地开发所述GAE应用程序:-).

标签:python,csv,google-app-engine,google-cloud-storage
来源: https://codeday.me/bug/20190717/1489919.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有