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(在的帮助下)来实现这一点。工作流程可以如下所示:

  • 通过Google Drive API(PyDrive)连接到我的Google Drive
  • 获取我的zipfile id
  • 将我的zipfile加载到内存中
  • 解压缩,获取XML文件
  • 解析XML,提取所需信息
  • 将其另存为本地计算机上的csv
  • 现在,我能够完成步骤1、2、4、5、6。但是我不知道如何将zipfile加载到内存中,而不先将其写入本地硬盘

    下面的PyDrive代码将获取zipfile并将其放在本地硬盘上,这并不是我想要的

    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")