博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python实例31[文件夹清理]
阅读量:4641 次
发布时间:2019-06-09

本文共 2807 字,大约阅读时间需要 9 分钟。

 

使用:

foldercleanup.py -d 10 -k c:\test\keepfile.txt c:\test

表示对c:\test目录只保留最近10天的子文件夹和keepfile.txt中指定的子文件夹。

 

代码:  

import
 os
import
 os.path
import
 datetime
  
def
 getOption():
  
from
 optparse 
import
 OptionParser
  
  des   
=
 
"
clean up the folder with some options
"
  prog  
=
 
"
foldercleanup
"
  ver   
=
 
"
%prog 0.0.1
"
  usage 
=
 
"
%prog [options] foldername
"
  
  p 
=
 OptionParser(description
=
des, prog
=
prog, version
=
ver, usage
=
usage,add_help_option
=
True)
  p.add_option(
'
-d
'
,
'
--days
'
,action
=
'
store
'
,type
=
'
string
'
,dest
=
'
days
'
,help
=
"
keep the subfolders which are created in recent %days% days
"
)
  p.add_option(
'
-k
'
,
'
--keepfile
'
,action
=
'
store
'
,type
=
'
string
'
,dest
=
'
keepfile
'
,help
=
"
keep the subfolders which are recorded in text file %keepfile% 
"
)
  options, arguments 
=
 p.parse_args()
  
  
if
 len(arguments) 
!=
 
1
:
    
print
(
"
error: must input one directory as only one parameter 
"
)
    
return
  
  
return
 options.days, options.keepfile, arguments[0]  
 
def
 preCheckDir(dir):
  
if
(
not
 os.path.exists(dir)):
    
print
(
"
error: the directory your input is not existed
"
)
    
return
  
if
(
not
 os.path.isdir(dir)):
    
print
 (
"
error: the parameter your input is not a directory
"
)
    
return
    
  
return
 os.path.abspath(dir)
  
def
 isKeepByDay(dir, day):
  indays 
=
 False
  
if
( day 
is
 
not
 None) :
    t 
=
 os.path.getctime(dir)
    today 
=
 datetime.date.today()
    createdate 
=
 datetime.date.fromtimestamp(t)
    indate 
=
 today 
-
 datetime.timedelta(days 
=
 int(day))
    
print
 (createdate)
    
if
(createdate 
>=
 indate):
      indays 
=
 True
  
print
 (indays)
  
return
 indays
  
def
 isKeepByKeepfile(dir, keepfile):
  needkeep 
=
 False
  
print
 (dir)
  
if
 (keepfile 
is
 
not
 None):
    
try
 :
      kf 
=
 open(keepfile,
"
r
"
)
      
for
 f 
in
 kf.readlines():
        
print
 (f)
        
if
 (dir.upper().endswith(
"
\\
"
 
+
 f.strip().upper())):
          needkeep 
=
 True
      kf.close()
    
except
:
      
print
 (
"
error: keep file cannot be opened
"
)
  
print
(needkeep)
  
return
 needkeep
    
def
 removeSubFolders(dir, day, keepfile):
  subdirs 
=
 os.listdir(dir)
  
for
 subdir 
in
 subdirs:
    subdir 
=
 os.path.join(dir,subdir)
    
if
 ( 
not
 os.path.isdir(subdir)):
      
continue
    
print
(
"
----------------------
"
)
    
if
( (
not
 isKeepByDay(subdir, day))
and
 (
not
 isKeepByKeepfile(subdir, keepfile))):
      
print
(
"
remove subfolder: 
"
 
+
 subdir)
      
import
 shutil
      shutil.rmtree(subdir,True)
    
def
 FolderCleanUp():
  (day, keepfile, dir) 
=
 getOption()
  dir 
=
 preCheckDir(dir)
  
if
 dir 
is
 None:
    
return
  removeSubFolders(dir,day,keepfile)
  
if
 
__name__
==
'
__main__
'
:
  FolderCleanUp()

 

对目录下保留最后的zip文件:

def
 KeepLastNumZips(num)
    
def
 extractTime(f):
        
return
 os.path.getctime(f)
    zipfiles 
=
 [os.path.join(zipdir, f)
                
for
 f 
in
 os.listdir(zipdir)
                
if
 os.path.splitext(f)[
1
==
 
"
.zip
"
]
    
if
 len(zipfiles) 
>
 num:
        zipfiles.sort(key
=
extractTime, reverse
=
True)
        
for
 i 
in
 range(num, len(zipfiles)):
            os.remove(zipfiles[i])

 

 

 

完!

转载于:https://www.cnblogs.com/itech/archive/2011/01/11/1915718.html

你可能感兴趣的文章
bzoj2120
查看>>
基于uFUN开发板的心率计(一)DMA方式获取传感器数据
查看>>
【dp】船
查看>>
oracle, group by, having, where
查看>>
⑥python模块初识、pyc和PyCodeObject
查看>>
object-c中管理文件和目录:NSFileManager使用方法
查看>>
Kibana:分析及可视化日志文件
查看>>
nodejs pm2使用
查看>>
cocos2d-x 3.10 PageView BUG
查看>>
装饰器的基本使用:用户登录
查看>>
CSS选择器总结
查看>>
mysql中sql语句
查看>>
head/tail实现
查看>>
sql语句的各种模糊查询语句
查看>>
vlc 学习网
查看>>
Python20-Day05
查看>>
Real World Haskell 第七章 I/O
查看>>
C#操作OFFICE一(EXCEL)
查看>>
【js操作url参数】获取指定url参数值、取指定url参数并转为json对象
查看>>
ABAP 程序间的调用
查看>>