我的zipfile
上有一个Google Drive
。其中zipfile
是XML file
,我要解析,提取特定信息并将此信息保存在我的本地计算机上(或任何地方)。
我的目标是使用Python& Google Drive API(在PyDrive的帮助下)实现此目的。工作流程如下:
现在,我能够执行步骤1,2,4,5,6。但我不知道如何将zipfile加载到内存中而不先将其写入本地硬盘。
以下PyDrive代码将获取zip文件并将其放在我的本地硬盘上,这不是我想要的。
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库读取这个字符串。这个解决方案是否可行?有没有更好的办法?
答案 0 :(得分:1)
您可以尝试StringIO
,他们会模拟文件,但会驻留在内存中。
以下是相关SO post的代码:
AFTER UPDATE
或使用# 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
希望这有帮助。
答案 1 :(得分:0)
最终,我使用BytesIO
和cp862
编码解决了这个问题:
toUnzipStringContent = toUnzip.GetContentString(encoding='cp862')
toUnzipBytesContent = BytesIO(toUnzipStringContent.encode('cp862'))
readZipfile = zipfile.ZipFile(toUnzipBytesContent, "r")