2012-03-30 12 views
0

Wie kann ich Dateien aus dem Verzeichnis extrahieren, die in Zip-Archiv existieren, habe ich zip-Archiv aus dem Formular (in HTML geschrieben), jetzt, wenn das Zip-Archiv Ordner enthält, kann ich nicht extrahieren in Seiten Dateien in diesem Ordner, das ist ein Ausschnitt aus meinem Code:Extrahieren Sie Dateien in Ordnern aus Zip-Archiv

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 

EDIT: ich versuchte StringIO() wie zu verwenden:

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

aber das Problem des zweiten Code-snippet wird:

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

, ich möchte diese Dateien extrahieren, um sie zu GAE BlobStore ??

Vielen Dank im Voraus.

Antwort

3

Es gibt ein funktionierendes Beispiel, wie man das in appengine-mapreduce macht.

Betrachten Sie input_readers.py für BlobstoreZipInputReader (die bei Linie 898 im Moment beginnt).

1

Ich verstehe nicht, warum Sie os.listdir verwenden, um Dateien in Zip-Daten aufzulisten, Sie sollten nur Namen gehen und Daten extrahieren, hier ist ein Beispiel, wo ich eine In-Memory-Zip-Datei erstellen und extrahieren, sogar in ein Ordner zB

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

Ausgang:

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

Wie appengine nicht schriftlich erlaubt System-Datei benötigen Sie Dateidaten (erklärt aboce) und Dump es Blobs zu lesen, können Sie nur eine einfache Struktur von Namen und Daten, aber in Ihrem lokalen Betriebssystem können Sie z.extractall() ausprobieren und es wird ganze Ordnerstruktur und Dateien erstellen.

+0

: in meiner Frage der Benutzer zip-Archiv-Datei aus dem Formular hochladen, ich muss es lesen, ich habe yor Methode beim Lesen aber das Lesen von Dateien in ZIP nicht Ordner? –

+0

@Eng_Engineer, in Ihrem Fall Benutzer auch Hochladen von Zip-Datei Daten, nicht tatsächlichen Ordner, so in meinem Beispiel zuerst erstellte ich solche Daten (die Ordnerstruktur enthalten) Ich denke, es sollte funktionieren –

+0

@ Anurag Uniyal: Ich habe das versucht, werde ich bearbeite meine Frage, aber das Problem ist immer noch –

Verwandte Themen