4

zipfile.Zipfile() 関数の使用に問題があります。ファイルを適切に zip しますが、出力 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 ファイル内に 2 つの余分なフォルダー (空の) を追加しています。したがって、ファイルが次のように 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」フォルダは、コピーしようとしているシェープファイルのディレクトリですが、これらのファイルを書き込んでいるだけの場合、サブディレクトリも zip ファイルにコピーされるのはなぜですか? ファイルを圧縮するので大したことではないと思いますが、何よりも面倒です。

zip ファイルを作成するときは、自分で指定したファイルを書き込むだけだと思いました。これらの余分なディレクトリが zip ファイル内に追加されるのはなぜですか? それを回避する方法はありますか?ここで何か不足していますか?ご意見をお待ちしております。ありがとう

4

1 に答える 1

4

ZipFile.write(filename[, arcname[, compress_type]])のオプションの 2 番目のパラメーターは、アーカイブ ファイルで使用される名前です。問題のあるフォルダーをパスの先頭から取り除き、残りをアーカイブ パス名に使用できます。arcpy がパスをどのように提供するかは正確にはわかりませんが、次のような方法zip.write(p.join(path,shape), shape)で行う必要があります。

于 2013-05-29T16:20:09.797 に答える