Python:从googledriveapi获取zip文件并加载其内容

2024-03-29 09:24:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我的^{上有一个zipfile。其中zipfile是一个XML file,我想解析它,提取一个特定的信息,并将这个信息保存在我的本地计算机(或任何地方)。在

我的目标是使用Python&googledriveapi(在PyDrive的帮助下)来实现这一点。工作流程如下:

  1. 通过Google Drive API(PyDrive)连接到我的Google Drive
  2. 拿到我的zipfile id
  3. 把我的拉链文件载入内存
  4. 解压,获取XML文件
  5. 解析XML,提取所需信息
  6. 在我的本地计算机上另存为csv

现在,我可以做第1、2、4、5、6步。但我不知道如何将zipfile加载到内存中,而不先将其写入本地硬盘。在

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

toUnzip = drive.CreateFile({'id':'MY_FILE_ID'})
toUnzip.GetContentFile('zipstuff.zip')

我想一个解决方案可以是:

我可以把zipfile读成一个带有某种编码的字符串:

^{pr2}$

然后,我可以用pythonzipfile库读取这个字符串(不知道StringIO如何有用)。这个解决方案有可能吗?有更好的方法吗?在


Tags: 文件内存字符串信息id计算机googlexml
2条回答

您可以尝试^{},它们模拟文件但驻留在内存中。在

以下是来自相关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

^{pr2}$

希望这有帮助。在

最后,我用BytesIOcp862编码解决了这个问题:

toUnzipStringContent = toUnzip.GetContentString(encoding='cp862')
toUnzipBytesContent = BytesIO(toUnzipStringContent.encode('cp862'))
readZipfile = zipfile.ZipFile(toUnzipBytesContent, "r")

相关问题 更多 >