windows-将zip文件内容提取到Python 2.7中的特定目录
这是我当前用于提取与脚本位于同一当前工作目录中的zip文件的代码。 如何指定要提取到的其他目录?
我尝试的代码未将其提取到我想要的位置。
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()
6个解决方案
105 votes
我认为您在这里只是一头雾水。 可能应该是以下内容:
import zipfile
fh = open('test.zip', 'rb')
z = zipfile.ZipFile(fh)
for name in z.namelist():
outpath = "C:\\"
z.extract(name, outpath)
fh.close()
如果只想提取所有文件:
import zipfile
with zipfile.ZipFile('test.zip', "r") as z:
z.extractall("C:\\")
对最新版本的Python使用pip install zipfile36
import zipfile36
secretmike answered 2020-01-17T17:38:59Z
12 votes
我尝试了该线程中的其他答案,但最终的解决方案很简单:
zfile = zipfile.ZipFile('filename.zip')
zfile.extractall(optional_target_folder)
查看extractall,但仅将其与可信赖的zip文件一起使用。
fiatjaf answered 2020-01-17T17:39:23Z
5 votes
添加到上述secretmike的答案中,支持python 2.6提取所有文件。
import zipfile
import contextlib
with contextlib.closing(zipfile.ZipFile('test.zip', "r")) as z:
z.extractall("C:\\")
Slakker answered 2020-01-17T17:39:43Z
3 votes
如果您只想使用Python从命令行中提取一个zip文件(例如,因为您没有可用的unzip命令),则可以直接调用zipfile模块
python -m zipfile -e monty.zip target-dir/
看一下文档。 它还支持压缩和列出内容。
Peter Gibson answered 2020-01-17T17:40:08Z
2 votes
彼得·德·里瓦兹(Peter de Rivaz)在上面的评论中有观点。 您将要在对open()的调用中包含目录。您将要执行以下操作:
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()
razzmataz answered 2020-01-17T17:40:29Z
0 votes
我已经修改了代码,要求用户输入文件名及其需要提取的位置,因此用户将对放置提取的文件夹的位置以及应该为提取的文件夹分配什么名称有更多的控制权。
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()
sarfarazit08 answered 2020-01-17T17:40:49Z