免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: ssfjhh
打印 上一主题 下一主题

本人编写的第一个脚本,用来删除所有旧版本文件和空文件夹,恳请高手给出意见。 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2012-07-06 15:12 |只看该作者
import os
import re

class ssfjhh:
    """
    under the current dir and its subdir, tell all old version files and remove them and all empty dir
    rename the newest file as .1 at last.
    """
    pattern_ = re.compile(r'\.\d+$')
   
    def __init__(self):
        # key is filename, value is the biggest version num
        self.versionfiles = {}
        
    def __findversionfiles__(self,dirname_):
        """
        find all files with '.[1-9+]'at the last name under dirname_and its subdir
        and store them in versionfiles
        """
        (dir,dirnames, filenames)= os.walk(dirname_)
        for filename in filenames:
            if pattern_(filename):
                fd= ssfjhh.pattern_.split(filename)[0]
                version = filename.split(fd + '.')
                if self.versionfiles.has_key(fd):
                    if self.versionfiles[fd] < int(version):
                        self.versionfiles[fd]= int(version)
                else:
                    self.versionfiles[fd]= int(version)
        for dirname in dirnames:
            findversionfiles(dirname)
                           
    def __removefiles__(self,dirname_):
        """
        remove old version file and rename the biggest version file to 1
        """
        (dir,dirnames, filenames)= os.walk(dirname_)
        for filename in filenames:
            if pattern(filename):
                fd= ssfjhh.pattern_.split(filename)[0]
                version = filename.split(fd + '.')
                if self.versionfiles.has_key(fd):
                    if self.versionfiles[fd] < int(version):
                      os.remove(os.path.join(dir,filname))  
                    else:
                      os.rename(os.path.join(dir,filname), os.path.join(dir,fd + '.' + '1'))
        for dirname in dirnames:
            removefiles(dirname)
            
    def __removeblankdir__(self,dirname_):
        """
        remove blank dir
        """
        (dir,dirnames, filenames)= os.walk(dirname_)
        if dirname == None and filenames == None:
            os.remove(dir)
        elif dirnames !=None:
            for dirname in dirnames:
                removeblankdir(dir)
            
    def remove(self,dirname_):
       removeblankdir(dirname_)
       findversionfiles(dirname_)
       removefiles(dirname_)
        
        

if __name__ == "__main__":
    test = ssfjhh()
    localdir = os.path.dirname(__file__)
    test.removefiles(localdir)

论坛徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龙
日期:2014-08-08 09:28:02狮子座
日期:2014-09-14 20:32:05
12 [报告]
发表于 2012-07-06 15:55 |只看该作者
回复 11# nm_0011

感谢,正在研究。
   

论坛徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龙
日期:2014-08-08 09:28:02狮子座
日期:2014-09-14 20:32:05
13 [报告]
发表于 2012-07-06 16:06 |只看该作者
回复 11# nm_0011
  1. (dir,dirnames, filenames)= os.walk(dirname_)
  2.         for filename in filenames:
  3.             if pattern_(filename):
  4.                 fd= ssfjhh.pattern_.split(filename)[0]
  5.                 version = filename.split(fd + '.')
  6.                 if self.versionfiles.has_key(fd):
  7.                     if self.versionfiles[fd] < int(version):
  8.                         self.versionfiles[fd]= int(version)
  9.                 else:
  10.                     self.versionfiles[fd]= int(version)
复制代码
这段代码的大概意思是查找目录下最大的版本号放入一个字典,字典的key就是没有版本号的文件名。
但是有一点我不太理解,通过os.walk(dirname_)得到filenames得到的是目录包括子目录下的所有文件名,怎样避免不同文件夹下同名的文件存在?
   

论坛徽章:
0
14 [报告]
发表于 2012-07-17 15:32 |只看该作者
看python手册上,filenames只是dir路径下的所有文件,不包含其子目录下的文件。

论坛徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龙
日期:2014-08-08 09:28:02狮子座
日期:2014-09-14 20:32:05
15 [报告]
发表于 2012-07-18 09:57 |只看该作者
本帖最后由 ssfjhh 于 2012-07-18 09:58 编辑

回复 14# nm_0011

    (dir,dirnames, filenames)= os.walk(os.getcwd())
ValueError: too many values to unpack (expected 3)


为什么呀

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP