import os
import zipfile
def zipDir(dirpath, outFullName):
"""
压缩指定文件夹
:param dirpath: 目标文件夹路径
:param outFullName: 压缩文件保存路径+xxxx.zip
:return: 无
"""
zip = zipfile.ZipFile(outFullName, "w", zipfile.ZIP_DEFLATED)
for path, dirnames, filenames in os.walk(dirpath):
# 去掉目标跟路径,只对目标文件夹下边的文件及文件夹进行压缩
fpath = path.replace(dirpath, '')
for filename in filenames:
print(filename)
try:
zip.write(os.path.join(path, filename), os.path.join(fpath, filename))
except Exception as e:
print(f"{filename} {e} zip failed")
zip.close()
if __name__ == "__main__":
input_path = input("t: ")
# output_path = r"F:\fanguangtao_cts\111.zip"
import time
s = time.time()
output_path = input_path + ".zip"
# print(output_path)
zipDir(input_path, output_path)
上面这段代码在运行超过256字符的长路径时候会出现报错,no suck file之类的。
所以需要在运行之前告诉windows这个路径有可能比较长,在路径前面加上
\\?\
如下所示
import os
import zipfile
def zipDir(dirpath, outFullName):
"""
压缩指定文件夹
:param dirpath: 目标文件夹路径
:param outFullName: 压缩文件保存路径+xxxx.zip
:return: 无
"""
zip = zipfile.ZipFile(outFullName, "w", zipfile.ZIP_DEFLATED)
for path, dirnames, filenames in os.walk(dirpath):
# 去掉目标跟路径,只对目标文件夹下边的文件及文件夹进行压缩
fpath = path.replace(dirpath, '')
for filename in filenames:
print(filename)
try:
zip.write(os.path.join(path, filename), os.path.join(fpath, filename))
except Exception as e:
print(f"{filename} {e} zip failed")
zip.close()
if __name__ == "__main__":
input_path = input("t: ")
# output_path = r"F:\fanguangtao_cts\111.zip"
import time
s = time.time()
output_path = input_path + ".zip"
# print(output_path)
zipDir(rf"\\?\{input_path}", output_path)
远程路径前缀就加上\\?\UNC