ZIP - 压缩文件实际上并不压缩文件

Posted

技术标签:

【中文标题】ZIP - 压缩文件实际上并不压缩文件【英文标题】:ZIP - Zipping Files Doesn't Actually ZIP The Files 【发布时间】:2014-04-07 02:36:35 【问题描述】:

我有一个简短的方法,它将文件路径和来自该路径的文件名列表作为参数,并且应该将所有这些文件压缩到一个存档文件中。问题是,它不是压缩文件,而是为我要压缩的每个文件在存档中创建一个空目录。方法如下:

 def zip(self, file_path, filename_list):

        f = zipfile.ZipFile(file_path + '_converted_zip_archive.zip', 'w')
        for filename in filename_list:
            f.write(file_path, filename)

        f.close()

如果我打电话

zip('uploads/', ['test_1.txt', 'test_2.txt', 'test_3.txt'])

我最终得到一个包含以下目录的存档文件:

/test_1.txt/
/test_2.txt/
/test_3.txt/

我在 ZIP 文件中创建了一堆空目录而不是实际压缩这些文本文件,我做错了什么?

【问题讨论】:

【参考方案1】:

您正在将目录写入存档三次(使用三个不同的名称)。更明确地说,您正在将以下内容写入存档:

uploads/ as test_1.txt
uploads/ as test_2.txt
uploads/ as test_3.txt

你更愿意这样做吗?

def zip(self, file_path, filename_list):
    f = zipfile.ZipFile(file_path + '_converted_zip_archive.zip', 'w')
    for filename in filename_list:
        f.write(file_path + filename, filename)  # note the addition of filename here
    f.close()

【讨论】:

是的,就是这样。谢谢! @jcaine04 太好了!很高兴你明白了。

以上是关于ZIP - 压缩文件实际上并不压缩文件的主要内容,如果未能解决你的问题,请参考以下文章

关于java解压缩文件(rar或者zip),压缩的文件是按文件的原目录来压缩的,并不是在同一个文件夹中。

求解 java 对压缩文件zip 加密 !

有关ZIP压缩包的破解

win7如何使用zip命令压缩一个csv。

Java实现文件压缩与解压

tar7z(7zip)压缩/解压缩指令的使用