将带有子文件夹的zip文件中的文件提取到单个文件夹中

3

我有一个包含多个子文件夹的压缩文件夹。 testfolder.zip中的文件以给定格式存储。

testfolder/files 1,2,3
testfolder/Test1folder/files 5,6
testfolder/Test2folder/files 7,8

我需要的输出结果是:

testfolder/files 1,2,3,4,5,6,7,8

我能够解压包括其子文件夹在内的文件夹,但不是以期望的方式。

这是我目前的尝试:

import glob
import os
import zipfile
folder = 'E:/Test'
extension = '.zip'
zip_files = glob.glob(folder + extension)
for zip_filename in zip_files:
    dir_name = os.path.splitext(zip_filename)[0]
    os.mkdir(dir_name)
    zip_handler = zipfile.ZipFile(zip_filename, "r")
    zip_handler.extractall(dir_name)

非常感谢您的帮助,提前致谢。


子文件夹也被压缩了吗?还是只有文件夹? - Marlon Abeykoon
只有主文件夹被压缩。 - Anila A
1个回答

1
替换:
zip_handler.extractall(dir_name)

用类似以下的内容:
for z in zip_handler.infolist():
    zip_handler.extract(z, dir_name)

这应该逐个处理归档文件,并将其提取到目录中的同一点。
更新: 显然它仍然相对提取它们。通过添加几行代码到您的原始片段,解决了这个问题。
for p, d, f in os.walk(folder, topdown= False):
for n in f:
    os.rename(os.path.join(p, n), os.path.join(dir_name, n))
for n in d:
    os.rmdir(os.path.join(p, n))    

这将把文件移动到基础文件夹并删除所有剩余的空文件夹。这个我已经尝试过并测试过了。

抱歉,那并没有解决问题。仍然得到未解压的带有子文件夹的旧输出。 - Anila A
1
抱歉,耽误了一些时间,被卡住了。请检查更新。应该可以了。 - Swakeert Jain
谢谢!这个可以工作,尽管有一个小问题。空的子文件夹也被创建了。 - Anila A
最后一行应该已经处理了这个问题。 - Swakeert Jain
是的,我的确犯了缩进错误。对于这个小错误,我感到很抱歉,并再次感谢您的帮助 :) - Anila A

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接