Python y el módulo zipfile

Según la documentación de Python:

ZipFile.extract (miembro [, ruta [, pwd]]) Extrae un miembro del archivo al directorio de trabajo actual ; miembro debe ser su nombre completo o un objeto ZipInfo). Su información de archivo se extrae con la mayor precisión posible. ruta especifica un directorio diferente para extraer . miembro puede ser un nombre de archivo o un objeto ZipInfo. pwd es la contraseña utilizada para los archivos cifrados.

Tengo una gran cantidad de archivos comprimidos que contienen 1000 archivos archivados. Usando la función anterior, solo puedo extraer los archivos que necesito de cada archivo comprimido:

def getAIDlist(aidlist_to_keep,ifile,folderName): archive = zipfile.ZipFile(ifile) # aidlist=archive.namelist() # gets the names of all files in the zipped archive print "AIDs to keep",aidlist_to_keep print "Number of AIDs in the zipped archive ",len(aidlist) path='/2015/MyCODE/'+folderName for j in aidlist_to_keep: for k in aidlist: if j in k: try: archive.extract(k,path) except: print "Could Not Extract file ",(j) pass return if __name__ == '__main__': getAIDlist(['9593','9458','9389'],"0009001_0010000.zip","TestingFolder") 

Idealmente, quiero que los archivos extraídos se almacenen en TestingFolder , pero en su lugar se almacenan en una carpeta recién creada 0009001_0010000.zip dentro de TestingFolder .

¿Cómo puedo dirigir los archivos extraídos directamente a TestingFolder pero sin crear una nueva carpeta 0009001_0010000.zip ?

En lugar de usar extract() , puede usar ZipFile.open() y copiar el archivo a un nombre de archivo de su propia elección; use shutil.copyfileobj() para copiar eficientemente los datos en:

 import shutil archive = zipfile.ZipFile(ifile) path = os.path.join('/2015/MyCODE', folderName) for name in aidlist_to_keep: try: archivefile = archive.open(name) except KeyError: # no such file in the archive continue with open(os.path.join(path, name), 'wb') as targetfile: shutil.copyfileobj(archivefile, targetfile)