2013-06-26 51 views
1

我想創建一個python腳本,它將查找一系列子文件夾並刪除空的shapefile文件。我已經成功創建了將刪除一個文件夾中的空文件的腳本部分,但「Project」文件夾中共有70個文件夾。雖然我可以複製並粘貼69次代碼,但我確定必須讓它查看每個子文件夾併爲每個子文件夾運行代碼。以下是我迄今爲止所擁有的。有任何想法嗎?我對此很新,我只是編輯了一個現有的代碼來實現這一目標。謝謝!如何讓Python查看子文件夾?

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") 

回答

0

有幾種方法可以做到這一點。我的glob

for shp in glob.glob('C:/Naview/Platypus/Project/**/*.shp'): 
    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" 
     continue 
    print "Removing", shp, "files" 
    for file in glob.glob(shp[:-3] + '*'): 
     print " removing", file 
     os.remove(file) 
0

時間來了解過程編程風扇:Defining Functions

把你的代碼放到一個函數的路徑參數,並調用它爲您的每個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()os.remove()調用的函數。

相關問題