2012-03-30 204 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

相關問題