我试图从一个文件夹中包含子文件夹的.zip中提取所有文件。我希望子文件夹中的所有文件只提取到一个文件夹中,而不保留原始结构。此时,我将全部提取,将文件移动到文件夹中,然后删除以前的子文件夹。同名的文件将被覆盖。
在写文件之前可以这样做吗?
下面是一个结构示例:
my_zip/file1.txt
my_zip/dir1/file2.txt
my_zip/dir1/dir2/file3.txt
my_zip/dir3/file4.txt
最后我要说:
my_dir/file1.txt
my_dir/file2.txt
my_dir/file3.txt
my_dir/file4.txt
我可以在这个代码中添加什么?
import zipfile
my_dir = "D:\\Download\\"
my_zip = "D:\\Download\\my_file.zip"
zip_file = zipfile.ZipFile(my_zip, 'r')
for files in zip_file.namelist():
zip_file.extract(files, my_dir)
zip_file.close()
如果从zip_file.namelist()重命名文件路径,则会出现以下错误:
KeyError: "There is no item named 'file2.txt' in the archive"
这将打开zip存档成员的文件句柄,提取文件名并将其复制到目标文件(这就是
ZipFile.extract
的工作方式,而不考虑子目录)。只需提取内存中的字节,计算文件名,然后自己写下来, 而不是让库来做--通常,只需使用“read()”而不是“extract()”方法:
可以在
ZipFile.infolist()
上迭代。在返回的ZipInfo
对象上,然后可以操作filename
来删除目录部分,最后将其提取到指定的目录。相关问题 更多 >
编程相关推荐