1

一連のサブフォルダーを調べて空のシェープファイルを削除する python スクリプトを作成しようとしています。1つのフォルダー内の空のファイルを削除するスクリプトの部分を作成できましたが、「プロジェクト」フォルダー内に合計70個のフォルダーがあります。コードを 69 回コピーして貼り付けることができましたが、各サブフォルダーを見て、それらの各サブフォルダーのコードを実行する方法であるに違いありません。以下は私がこれまでに持っているものです。何か案は?私はこれに非常に慣れていないので、既存のコードを編集してここまでたどり着きました。ありがとう!

import os

# Set the working directory
os.chdir ("C:/Naview/Platypus/Project")

# Get the list of only files in the current directory
file = filter(os.path.isfile, os.listdir('C:/Naview/Platypus/Project'))
# For each file in directory
for shp in file:
    # Get only the files that end in ".shp"
    if shp.endswith(".shp"):
        # Get the size of the ".shp" file.
        # NOTE: The ".dbf" file can vary is size whereas
        #       the shp & shx are always the same when "empty".
        size = os.path.getsize(shp)
        print "\nChecking " + shp + "'s file size..."

        #If the file size is greater than 100 bytes, leave it alone.                  
        if size > 100:
            print "File is " + str(size) + " bytes"
            print shp + " will NOT be deleted \n"

        #If the file size is equal to 100 bytes, delete it.      
        if size == 100:
            # Convert the int output from (size) to a string.
            print "File is " + str(size) + " bytes"                    
            # Get the filename without the extention
            base = shp[:-4]
            # Remove entire shapefile
            print "Removing " + base + ".* \n"
            if os.path.exists(base + ".shp"):
               os.remove(base + ".shp")
            if os.path.exists(base + ".shx"):
                os.remove(base + ".shx")
            if os.path.exists(base + ".dbf"):
                os.remove(base + ".dbf")
            if os.path.exists(base + ".prj"):
                os.remove(base + ".prj")
            if os.path.exists(base + ".sbn"):
                os.remove(base + ".sbn")
            if os.path.exists(base + ".sbx"):
                os.remove(base + ".sbx")
            if os.path.exists(base + ".shp.xml"):
                os.remove(base + ".shp.xml")
4

2 に答える 2

0

手続き型プログラミングについて学ぶ時間:関数の定義

パス パラメーターを使用してコードを関数に入れ、70 個のパスごとに呼び出します。

def delete_empty_shapefiles(path):
    # Get the list of only files in the current directory
    file = filter(os.path.isfile, os.listdir(path))
    ...

paths = ['C:/Naview/Platypus/Project', ...]
for path in paths:
    delete_empty_shapefiles(path)

os.path.exists()andos.remove()呼び出しを実行する関数を作成するためのボーナス ポイント。

于 2013-06-26T21:04:50.677 に答える