最近做了一个关于os模块的小练习。附代码:
# del files
import os, pprint
def myfilelist(filedir):
for fd in os.listdir(filedir):
filename = filedir + os.sep + fd
if os.path.isfile(filename):
yield filename
elif os.path.isdir(filename):
for result in myfilelist(filename):
yield result
else:
pass
ds = {}
def _findmaxds(ds = ds):
if len(ds) <= 0: return
result = []
maxvalue = max(ds.values())
for key in ds:
if ds[key] == maxvalue:
result.append(key)
else:
pass
return result
def _updateds(filename, lowerlimit, ds = ds):
filesize = os.path.getsize(filename)
if filesize > lowerlimit:
if ds.has_key(filename):
ds[filename] += 1
else:
ds[filename] = 1
return (ds, filesize)
def normalsearch(filedir, lowerlimit, ds = ds):
formatstr = "filename: %s; size (bytes): %d;"
if os.path.isfile(filedir):
ds, filesize = _updateds(filedir, lowerlimit)
print(formatstr % (filedir, filesize))
if filesize > lowerlimit:
yield filedir
elif os.path.isdir(filedir):
for fd in myfilelist(filedir):
ds, filesize = _updateds(fd, lowerlimit)
print(formatstr % (filedir, filesize))
if filesize > lowerlimit:
yield fd
else:
pass
def _bayesearchcore(filedir, ds = ds):
maxds = _findmaxds(ds)
if maxds:
for md in maxds:
if filedir in md:
yield md
def _bayesearch(filedir, lowerlimit):
for bs in _bayesearchcore(filedir):
for f in myfilelist(filedir):
filesize = os.path.getsize(f)
if filesize > lowerlimit:
yield f
def search(filedir, lowerlimit):
blist = list(_bayesearch(filedir, lowerlimit))
if len(blist) > 0:
return blist
else:
nlist = list(normalsearch(filedir, lowerlimit))
return nlist
def delfiles(filelist):
for f in filelist:
os.remove(f)
def main():
filedir = raw_input("Please input your file directory: ")
lowerlimit = raw_input("Please input your limit: ")
lowerlimit = int(lowerlimit)
delfiles(search(filedir, lowerlimit))
main()
测试功能是删除指定文件夹内所有大于指定文件大小的文件。