#-*- 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 ...