文件夹中的许多文件。我想将它们全部拉上拉链。每10个文件将被添加到一个zip文件中。
import os, glob
import numpy as np
import zipfile
file_folder = "C:\\ABC\\DEF\\"
all_files = glob.glob(file_folder + "/*.*")
several_lists= np.array_split(all_files, 10)
for num, file_names in enumerate(several_lists):
ZipFile = zipfile.ZipFile(file_folder + str(num) + ".zip", "w" )
for f in file_names:
ZipFile.write(f, compress_type=zipfile.ZIP_DEFLATED)
ZipFile.close()
生成的zip文件还包含路径,即每个zip文件在ABC文件夹中都有一个DEF文件夹。该文件本身位于DEF中。
我将行更改为:
ZipFile.write(os.path.basename(f), compress_type=zipfile.ZIP_DEFLATED)
出现以下错误:
WindowsError: [Error 2] The system cannot find the file specified:
如何更正?谢谢。
顺便说一句,Python创建的zip和rar文件有很大的不同吗?
答案 0 :(得分:2)
ZipFile.write
具有参数arcname
,该参数允许显式提供归档文件名(默认情况下与磁盘路径相同)。
因此只需使用zip.write(f, arcname=os.path.basename(f))
。
为简单起见,您可以在zipfile.ZipFile
上设置压缩模式。
编辑:并且您可以将zipfile用作上下文管理器,以提高可靠性和减少行数,并假设Python 3.6 f字符串不错:
with zipfile.ZipFile(f'{file_folder}{num}.zip', 'w', compression=zipfile.ZIP_DEFLATED) as zip:
for f in file_names:
zip.write(f, arcname=os.path.basename(f))