Python:从googledriveapi获取zip文件并加载其内容
我的Python:从googledriveapi获取zip文件并加载其内容,python,google-api,google-drive-api,google-api-python-client,pydrive,Python,Google Api,Google Drive Api,Google Api Python Client,Pydrive,我的googledrive上有一个zipfile。其中zipfile是一个XML文件,我想对其进行解析、提取特定信息并将此信息保存在本地计算机上(或任何地方) 我的目标是使用Python和googledriveapi(在的帮助下)来实现这一点。工作流程可以如下所示: 通过Google Drive API(PyDrive)连接到我的Google Drive 获取我的zipfile id 将我的zipfile加载到内存中 解压缩,获取XML文件 解析XML,提取所需信息 将其另存为本地计算机上的cs
googledrive
上有一个zipfile
。其中zipfile
是一个XML文件
,我想对其进行解析、提取特定信息并将此信息保存在本地计算机上(或任何地方)
我的目标是使用Python和googledriveapi(在的帮助下)来实现这一点。工作流程可以如下所示:
toUnzip = drive.CreateFile({'id':'MY_FILE_ID'})
toUnzip.GetContentFile('zipstuff.zip')
我想一个解决方案可能是: 我可以将zipfile读取为带有某种编码的字符串:
toUnzip = drive.CreateFile({'id':'MY_FILE_ID'})
zipAsString = toUnzip.GetContentString(encoding='??')
然后,我可以用Python zipfile库以某种方式(不知道如何,也许StringIO
会有用)读取这个字符串。这个解决方案可能吗?有更好的办法吗 您可以尝试,它们模拟文件,但驻留在内存中
以下是相关SO的代码:
或者使用URL
:
url = urlopen("http://www.test.com/file.zip")
zipfile = ZipFile(StringIO(url.read()))
希望这能有所帮助。最终,我用
BytesIO
和cp862
编码解决了这个问题:
toUnzipStringContent = toUnzip.GetContentString(encoding='cp862')
toUnzipBytesContent = BytesIO(toUnzipStringContent.encode('cp862'))
readZipfile = zipfile.ZipFile(toUnzipBytesContent, "r")
非常感谢你的回答,也是一个启发。我最终用BytesIO和特殊编码解决了这个问题。
toUnzipStringContent = toUnzip.GetContentString(encoding='cp862')
toUnzipBytesContent = BytesIO(toUnzipStringContent.encode('cp862'))
readZipfile = zipfile.ZipFile(toUnzipBytesContent, "r")