2012-03-30 72 views
0

如何从ZIP存档中存在的目录中提取文件,我从表单(用HTML写入)上传zip存档,现在如果Zip存档包含文件夹,我无法提取在侧面这个文件夹中的文件,这是从我的代码片段:从Zip Archive中提取存在于文件夹中的文件

form = cgi.FieldStorage() 
file_upload = form['file'] 
zfile=zipfile.ZipFile(file_upload.file,"r") 
files_zip=zfile.namelist() 
for name in files_zip: 
    print name 
    if name.endswith('/'): 
     print "yes" 
     l=list() 
     l=os.listdir(name) 
     print l 

编辑: 我试图用StringIO()为:

s=StringIO(file_upload) 
f=s.getvalue() 
with zipfile.ZipFile(f,'r')as z: 
     for d in z.namelist(): 
       print "%s: %s"%(d, z.read(d)) 

,但第二个代码片断的问题是:

No such file or directory: "FieldStorage('file', 'test.zip') 

,我想提取这些文件,将它们添加到GAE BlobStore?

在此先感谢。

回答

1

我不明白你为什么使用os.listdir列出zip文件中的文件,你应该直接通过名称和提取数据,这里是一个例子,我创建了一个内存中的zip文件并提取文件,甚至在一个文件夹例如

from zipfile import ZipFile 
from StringIO import StringIO 

# first lets create a zip file with folders to simulate data coming from user 
f = StringIO() 
with ZipFile(f, 'w') as z: 
    z.writestr('1.txt', "data of file 1") 
    z.writestr('folder1/2.txt', "data of file 2") 

zipdata = f.getvalue() 

# try to read zipped data containing folders 
f = StringIO(zipdata) 
with ZipFile(f, 'r') as z: 
    for name in z.namelist(): 
     print "%s: %s"%(name, z.read(name)) 

输出:

1.txt: data of file 1 
folder1/2.txt: data of file 2 

随着AppEngine上不允许写入文件系统,你需要阅读的文件数据(解释aboce),并转储到斑点,你可以有一个简单的结构的名称和数据,但在您本地操作系统中,您可以尝试z.extractall(),它会创建整个文件夹结构和文件。

+0

:在我的问题中,用户从表单上传zip存档文件,我需要阅读它,我在阅读中使用yor方法,但是这样读取ZIP文件夹内的文件不是文件夹? – 2012-03-30 16:16:39

+0

@Eng_Engineer,你的情况用户也上传zip文件数据,而不是实际的文件夹,所以在我的例子中,我创建了这样的数据(其中包含文件夹结构)我认为它应该工作 – 2012-03-30 16:35:20

+0

@ Anurag Uniyal:我试过了,我会编辑我的问题,但问题仍然是 – 2012-03-30 16:43:32

相关问题