windows - Udpakning af zip-fil indhold til specifikke mapper i Python 2.7

Indlæg af Hanne Mølgaard Plasc

Problem



Dette er koden, jeg aktuelt bruger til at udtrække en zip-fil, der lever i samme nuværende arbejdskatalog som scriptet. Hvordan kan jeg angive en anden mappe, der skal hentes til?


Koden jeg prøvede uddrager ikke den, hvor jeg vil.


import zipfile

fh = open('test.zip', 'rb')
z = zipfile.ZipFile(fh)
for name in z.namelist():
    outfile = open(name, 'wb')
    outfile.write('C:\'+z.read(name))
    outfile.close()
fh.close()

Bedste reference


Jeg tror, ​​du har lige fået en mixup her. Skal nok være noget som følgende:


import zipfile

fh = open('test.zip', 'rb')
z = zipfile.ZipFile(fh)
for name in z.namelist():
    outpath = "C:\"
    z.extract(name, outpath)
fh.close()


og hvis du bare vil udtrække alle filerne:


import zipfile

with zipfile.ZipFile('test.zip', "r") as z:
    z.extractall("C:\")



  Brug pip install zipfile36 til nyere versioner af Python



import zipfile36

Andre referencer 1


Jeg prøvede de andre svar i denne tråd, men den endelige løsning for mig var simpelthen:


zfile = zipfile.ZipFile('filename.zip')
zfile.extractall(optional\_target\_folder)


Se på extractall, men brug det kun med troværdige zip-filer. [10]

Andre referencer 2


Tilføjelse til SecretMike 's svar ovenfor med support til Python 2.6 for at udvinde alle filer.


import zipfile
import contextlib


with contextlib.closing(zipfile.ZipFile('test.zip', "r")) as z:
   z.extractall("C:\")

Andre referencer 3


Peter de Rivaz har et punkt i kommentaren ovenfor. Du vil gerne have biblioteket i opkaldet for at åbne ().
Du vil gerne gøre noget som dette:


import zipfile
import os

os.mkdir('outdir')
fh = open('test.zip','rb')
z = zipfile.ZipFile(fh)
for name in z.namelist():
    outfile = open('outdir'+'/'+name, 'wb')
    outfile.write()
    outfile.close()
fh.close()

Andre referencer 4


Hvis du bare vil udpakke en zip-fil fra kommandolinjen ved hjælp af Python (sige, fordi du ikke har kommandoen Unzip-ledig tilgængelig), så kan du ringe zipfile-modulet direkte


python -m zipfile -e monty.zip target-dir/


Tag et kig på docs. Den understøtter også komprimering og notering af indholdet. [11]

Andre referencer 5


Jeg har ændret koden for at bede brugeren input filnavnet og dens sti, hvor den skal udvindes, og brugeren vil derfor have mere kontrol over hvor man skal sætte Den uddragne mappe og hvilket navn skal tildeles den uddragne mappe.


import zipfile

#picking zip file from the directory
ZipFileName = raw\_input("Enter full path to zip file:")  
fh = open( ZipFileName , 'rb')
z = zipfile.ZipFile(fh)

#assigning a name to the extracted zip folder
DestZipFolderName = raw\_input("Assign destination folder a name: ")
DestPathName = raw\_input("Enter destination directory: ")
DestPath = DestPathName + "\" + DestZipFolderName

for name in z.namelist():   
    outpath = DestPath
    z.extract(name, outpath)
fh.close()