刪除空目錄和空檔案

2021-05-24 14:48:45 字數 2202 閱讀 6071

#-*- coding:cp936 -*-

"""os.walk()

函式宣告:walk(top,topdown=true,οnerrοr=none)

1>引數top表示需要遍歷的目錄樹的路徑

2>引數topdown的預設值是"true",表示首先返回目錄樹下的檔案,然後在遍歷目錄樹的子目錄.topdown的值為"false"時,

則表示先遍歷目錄樹的子目錄,返回子目錄下的檔案,最後返回根目錄下的檔案

3>引數onerror的預設值是"none",表示忽略檔案遍歷時產生的錯誤.如果不為空,則提供乙個自定義函式提示錯誤資訊後繼續

遍歷或丟擲異常中止遍歷

4>該函式返回乙個元組,該元組有3個元素,這3個元素分別表示每次遍歷的路徑名,目錄列表和檔案列表

在2.5版中新增加了乙個叫partition的函式,它可以做什麼呢?舉乙個小例子:

從第乙個例子可以看出,它用來根據指定的分隔符將字串進行分割,如果字串包含指定的分隔符,則返回乙個3元的tuple,

第乙個為分隔符左邊的子串,第二個為分隔符本身,第三個為分隔符右邊的子串。第二個例子說明,如果找不到指定的分隔符,

則返回仍然是乙個3元的tuple,第乙個為整個字串,第二和第三個為空串

"""import os, sys

def remove_empty_dir(path):

print path

while(path[-1] == "//"):

path = path[:-1]

print path

a = {}

for root, dirs, files in os.walk(path, true):

if len(files) == 0:

a[root] = 0

else:

for file in files:    #對檔案列表進行掃瞄

try:

fn = os.path.join(root, file)  #將路徑名和檔名拼接起來

size = os.path.getsize(fn)     #獲取檔名大小

if size != 0:

b = root

while(b != path):

a[b] = 1

b = b.rpartition("//")[0]  #儲存上一級目錄名

a[path] = 1

else:   

try:

os.remove(fn)     #刪除檔名為空的檔案

a[root] = 0

except (windowserror):

b = root

while(b != path):

a[b] = 1

b = b.rpartition("//")[0]

a[path] = 1

except windowserror:

b = root

while(b != path):

a[b] = 1

b = b.rpartition("//")[0]

a[path] = 1

if a[root]:

break;

empty_dirs =

for i, j in a.iteritems():

if j == 0:

print i

empty_dirs.insert(0, i)

del a

empty_dirs.sort(reverse=true)   

for i in empty_dirs:

try:

os.rmdir(i)         #刪除目錄

print "%s 刪掉了!!" % (i)

except (windowserror):

print "%s 刪不掉!!" % (i)

if __name__ == "__main__":

remove_empty_dir('f://aa')

刪除乙個碟符下所有的檔案 沒有搞定  很糾結啊   在想想吧

刪除目錄下所有的空檔案及空目錄

傳入指定目錄 private static void deleteemptydir file dir if tmpfile.isdirectory if tmpfile.isdirectory tmpfile.listfiles length 0 if dir.isdirectory dir.lis...

刪除空目錄

專案需要遍歷兩個樹,以及其他一些引數生成一批excel 檔案樹,即 n級目錄 excel檔案。為了提高建立檔案的效率,一開始,遍歷的過程中,就將乙個乙個excel檔案樹子節點先建立好 只是建立目錄,並沒有建立檔案 然後,開啟100多個執行緒,各自去查資料庫,建立相應的檔案。單錶最多8w條資料,但總量...

Linux刪除空目錄

今天整理東西。需要刪掉小於5m的檔案。乙個find就可以了 find type f size 5m exec rm f 然後需要刪掉所有的空目錄。沒想到簡單的命令,於是組合一下命令 bin bash filename rm empty dir.shfor i in find type d doif ...