压缩文件包含额外的不必要文件夹

5

我一直在使用zipfile.Zipfile()函数时遇到问题。它可以正确地压缩我的文件,但是输出zip文件中会有额外的文件夹,而我并不需要这些文件夹。它确实将我想要的所有文件放在了.zip文件中,但似乎默认情况下会添加正在写入.zip文件中的最后几个目录。有没有办法排除这些文件夹?以下是我的代码:

import arcpy, os
from os import path as p
import zipfile
arcpy.overwriteOutput = True


def ZipShapes(path, out_path):
    arcpy.env.workspace = path
    shapes = arcpy.ListFeatureClasses()

    # iterate through list of shapefiles
    for shape in shapes:
        name = p.splitext(shape)[0]
        print name
        zip_path = p.join(out_path, name + '.zip')
        zip = zipfile.ZipFile(zip_path, 'w')
        zip.write(p.join(path,shape))
        for f in arcpy.ListFiles('%s*' %name):
            if not f.endswith('.shp'):
                zip.write(p.join(path,f))
        print 'All files written to %s' %zip_path
        zip.close()

if __name__ == '__main__':

    path = r'C:\Shape_test\Census_CedarCo'
    out_path = r'C:\Shape_outputs'

    ZipShapes(path, out_path)

我尝试发布一些图片但是由于声望不够所以无法上传。实际上,这是将两个额外的文件夹(为空)添加到zip文件中。因此,文件不像这样直接放在zip中:

C:\Shape_outputs\Public_Buildings.zip\Public_Buildings.shp

它们显示成这样:
C:\Shape_outputs\Public_Buildings.zip\Shape_test\Census_CedarCo\Public_Buildings.shp

“Shape_test”和“Census_CedarCo”文件夹是我尝试复制的shapefile所在的目录,但如果我只是写这些文件,为什么子目录也被复制到zip文件中呢?我想这并不是什么大问题,因为我已经将文件压缩了,但这更像是一种烦恼而已。”
“我原以为在创建zip文件时它只会写入我指定的文件本身。为什么它会在zip文件内添加这些额外的目录呢?有没有办法避免这种情况?我是否漏掉了什么?感谢任何帮助!谢谢。”
1个回答

4
ZipFile.write(filename[, arcname[, compress_type]]) 函数的第二个可选参数是用于存档文件中的名称。您可以从路径前面删除不必要的文件夹,并使用其余部分作为存档路径名。我不确定arcpy如何提供路径,但类似zip.write(p.join(path,shape), shape)的代码应该可以实现。

1
太好了!我一直在想arcname参数是什么意思...我想我应该多读一些资料。现在完美地运行了!再次感谢! - cmackey

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