簡體   English   中英

如何讓Python查看子文件夾?

[英]How to get Python to look at Sub-Folders?

我正在嘗試創建一個Python腳本,該腳本將在一系列子文件夾中查找並刪除空的shapefile。 我已經成功創建了腳本部分,該部分將刪除一個文件夾中的空文件,但是“項目”文件夾中總共有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")

有幾種方法可以做到這一點。 我是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)

是時候學習過程編程了: 定義函數

將您的代碼放入帶有path參數的函數中,並為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()調用的函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM