2013-06-26 53 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()调用的函数。

相关问题