Python:从 Google Drive API 获取 zip 文件并加载其内容
Posted
技术标签:
【中文标题】Python:从 Google Drive API 获取 zip 文件并加载其内容【英文标题】:Python: Get zip file from Google Drive API and load its content 【发布时间】:2017-03-20 13:06:45 【问题描述】:我的Google Drive
上有一个zipfile
。其中zipfile
是XML file
,我想对其进行解析、提取特定信息并将此信息保存在我的本地计算机(或任何地方)上。
我的目标是使用 Python 和 Google Drive API(在 PyDrive 的帮助下)来实现这一点。工作流程可能如下:
-
通过 Google Drive API (PyDrive) 连接到我的 Google Drive
获取我的 zipfile id
将我的 zipfile 加载到内存中
解压,获取XML文件
解析 XML,提取所需信息
在我的本地计算机上将其保存为 csv
现在,我可以执行步骤 1、2、4、5、6。但是我不知道如何将 zipfile 加载到内存中而不先将其写入本地硬盘。
以下 PyDrive 代码将获取 zipfile 并将其放在我的本地 HDD 上,这不是我想要的。
toUnzip = drive.CreateFile('id':'MY_FILE_ID')
toUnzip.GetContentFile('zipstuff.zip')
我猜一种解决方案可能如下:
我可以将 zipfile 读取为带有某种编码的字符串:
toUnzip = drive.CreateFile('id':'MY_FILE_ID')
zipAsString = toUnzip.GetContentString(encoding='??')
然后,我可以以某种方式(不知道如何,也许StringIO
可能有用)使用 Python zipfile 库读取此字符串。这个解决方案甚至可能吗?有没有更好的办法?
【问题讨论】:
【参考方案1】:你可以试试StringIO
,它们模拟文件但驻留在内存中。
这是来自相关 SO post 的代码:
# get_zip_data() gets a zip archive containing 'foo.txt', reading 'hey, foo'
from StringIO import StringIO
zipdata = StringIO()
zipdata.write(get_zip_data())
myzipfile = zipfile.ZipFile(zipdata)
foofile = myzipfile.open('foo.txt')
print foofile.read()
# output: "hey, foo"
或使用URL
:
url = urlopen("http://www.test.com/file.zip")
zipfile = ZipFile(StringIO(url.read()))
希望这会有所帮助。
【讨论】:
非常感谢您的回答和启发。我最终用 BytesIO 和特殊编码解决了。【参考方案2】:最终,我使用BytesIO
和cp862
编码解决了这个问题:
toUnzipStringContent = toUnzip.GetContentString(encoding='cp862')
toUnzipBytesContent = BytesIO(toUnzipStringContent.encode('cp862'))
readZipfile = zipfile.ZipFile(toUnzipBytesContent, "r")
【讨论】:
以上是关于Python:从 Google Drive API 获取 zip 文件并加载其内容的主要内容,如果未能解决你的问题,请参考以下文章
通过 Google Drive API 从本地 CSV 文件创建 Google Drive 电子表格
Google Drive API Python 服务帐户示例
Google Drive API v3 Python文件中缺少某些文件()。list()
2小时后Google Drive Python API可恢复上传错误401