我需要使用python压缩包含.xml文件和.fgdb文件的文件夹。谁能帮助我?我尝试了一些我在互联网上找到的脚本,但总有一些技术问题(比如创建一个空的zip文件,或创建zip文件我无法打开'没有权限'等等。)
提前致谢。
答案 0 :(得分:12)
使其工作的关键是os.walk()函数。这是我过去组装的一个应该有效的脚本。如果您有任何例外,请告诉我。
import zipfile
import os
import sys
def zipfolder(foldername, target_dir):
zipobj = zipfile.ZipFile(foldername + '.zip', 'w', zipfile.ZIP_DEFLATED)
rootlen = len(target_dir) + 1
for base, dirs, files in os.walk(target_dir):
for file in files:
fn = os.path.join(base, file)
zipobj.write(fn, fn[rootlen:])
zipfolder('thenameofthezipfile', 'thedirectorytobezipped') #insert your variables here
sys.exit()
答案 1 :(得分:0)
This answer很有帮助,但花了我一点时间才完全了解rootlen
的用途。本示例使用一些较长的变量名来帮助教导此处的实际情况。还包括一个验证zip文件正确的块。
import os
import zipfile
src_path = os.path.join('/', 'some', 'src', 'path')
archive_name = 'myZipFile.zip'
archive_path = os.path.join('/', 'some', 'path', archive_name)
with zipfile.ZipFile(archive_path, 'w', zipfile.ZIP_DEFLATED) as archive_file:
for dirpath, dirnames, filenames in os.walk(src_path):
for filename in filenames:
file_path = os.path.join(dirpath, filename)
archive_file_path = os.path.relpath(file_path, src_path)
archive_file.write(file_path, archive_file_path)
with zipfile.ZipFile(archive_path, 'r') as archive_file:
bad_file = zipfile.ZipFile.testzip(archive_file)
if bad_file:
raise zipfile.BadZipFile(
'CRC check failed for {} with file {}'.format(archive_path, bad_file))
答案 2 :(得分:0)
如果有人想在你的项目中使用一些通用函数
def zip_compression_tree(root_path, zip_name):
with zipfile.ZipFile(zip_name, 'w') as z:
for root, dirs, files in os.walk(root):
for file in files:
z.write(os.path.join(root, file))
for directory in dirs:
z.write(os.path.join(root, directory))