没有完美的软件,够用并且容易使用的软件已经算是完美的了。
今天整理这几天的代码
# -*- coding: utf-8 -*- import os import sys import cmd class PyCDC(cmd.Cmd): def __init__(self): # 初始化基类 cmd.Cmd.__init__(self) self.CDROM = 'E:\\iso\\CentOS-6.8-x86_64-bin-DVD1' self.CDDIR = 'F:\\back\\' # 定义命令行环境的前缀字符 self.prompt = "(PyCDC)>" # 定义命令行环境的最初提示 self.intro = """使用说明: dir 目录名 # 指定保存和搜索目录,默认是"F:\\back\\" walk 文件名 # 指定光盘信息文件名,使用"*.cdc" find 关键词 # 使用在保存和搜索目录中遍历所有.cdc文件,输出含有关键词的行 ? #查询 quit #推出系统,也可以使用Ctrl+D(Unix)|Ctrl+Z(Dos/windows) """ def do_walk(self, filename): if filename == "": filename = input("请输入cdc文件名:") print("指定保存的文件名为:'%s'" % filename) cdWalker(self.CDROM, self.CDDIR+filename) def help_walk(self): print("扫描指定路径的目录结构,并输出到指定的'.cdc'文件中") def do_dir(self, pathname): if pathname == "": pathname = input("请输入指定保存/搜索目录(默认是:'%s'):" % (self.CDDIR)) self.CDDIR = pathname print("指定保存/搜索目录为:'%s'" % (pathname)) mkdir(pathname) def help_dir(self): print("指定保存/搜索目录") def do_find(self, keyword): if keyword == "": keyword = input("请输入搜索关键词:") print("指定搜索关键词为:'%s'" % keyword) cdcGrep(self.CDDIR, keyword) def help_find(self): print("搜索关键词") def do_quit(self, arg): sys.exit() def help_quit(self): print("退出程序") # 定义quit的快捷方式 do_q = do_quit def cdWalker(cdrom, cdcfile): ''' 扫描指定路径的目录结构并保存为新的文件 ''' export = [] for root, dirs, files in os.walk(cdrom): export.append("\n %s;%s;%s" % (root, dirs, files)) open(cdcfile, 'w').write(''.join(export)) print('扫描目录结构保存到{}'.format(cdcfile)) def cdcGrep(cdcpath, keyword): ''' 光盘信息文本关键词搜索 ''' # 搜索目录中的文件 filelist = os.listdir(cdcpath) cdcpath = cdcpath + "\\" # 循环文件列表 for cdc in filelist: if os.path.isdir(cdcpath+cdc): print('搜索子目录{}'.format(cdcpath+cdc)) # 若是子目录,则递归调用完成查找 cdcGrep(cdcpath+cdc, keyword) else: if cdc.endswith('.cdc'): print('找到目标文件:{}'.format(cdc)) # 拼合文件路径,并打开文件 cdcfile = open(cdcpath + cdc) # 读取文件每一行,并循坏 for line in cdcfile.readlines(): exist = False # 判断是否有关键词在行中 if keyword in line: print(line) exist = True if not exist: print('文件{}中,找不到关键词{}'.format(cdc, keyword)) def mkdir(pathname): ''' 自动创建不存在的目录 ''' # 去除首尾空格 path=pathname.strip() # 去除尾部 \ 符号 path=pathname.rstrip("\\") # 判断路径是否存在 if not os.path.exists(pathname): try: # 创建目录 os.makedirs(pathname) except FileNotFoundError as reason: print(reason) else: print('指定的目录不存在,将自动为您创建') if __name__ == '__main__': cdc = PyCDC() cdc.cmdloop()
运行效果如下:
使用说明: dir 目录名 # 指定保存和搜索目录,默认是"F:\back\" walk 文件名 # 指定光盘信息文件名,使用"*.cdc" find 关键词 # 使用在保存和搜索目录中遍历所有.cdc文件,输出含有关键词的行 ? #查询 quit #推出系统,也可以使用Ctrl+D(Unix)|Ctrl+Z(Dos/windows) (PyCDC)>walk 请输入cdc文件名:1.cdc 指定保存的文件名为:'1.cdc' 扫描目录结构保存到F:\back\1.cdc (PyCDC)>?dir 指定保存/搜索目录 (PyCDC)>dir 请输入指定保存/搜索目录(默认是:'F:\back\'):G:\back指定保存/搜索目录为:'G:\back\' [WinError 3] 系统找不到指定的路径。: 'G:\\' (PyCDC)>dir F:\back\bak指定保存/搜索目录为:'F:\back\bak\' 指定的目录不存在,将自动为您创建 (PyCDC)>walk 2.cdc 指定保存的文件名为:'2.cdc' 扫描目录结构保存到F:\back\bak\2.cdc (PyCDC)>find 请输入搜索关键词:image 指定搜索关键词为:'image' 找到目标文件:2.cdc E:\iso\CentOS-6.8-x86_64-bin-DVD1;['EFI', 'images', 'isolinux', '[BOOT]'];['.discinfo', '.treeinfo', 'CentOS_BuildTag', 'EULA', 'GPL', 'RELEASE-NOTES-en-US.html', 'RPM-GPG-KEY-CentOS-6', 'RPM-GPG-KEY-CentOS-Debug-6', 'RPM-GPG-KEY-CentOS-Security-6', 'RPM-GPG-KEY-CentOS-Testing-6', 'TRANS.TBL'] E:\iso\CentOS-6.8-x86_64-bin-DVD1\images;['pxeboot'];['efiboot.img', 'efidisk.img', 'install.img', 'TRANS.TBL'] E:\iso\CentOS-6.8-x86_64-bin-DVD1\images\pxeboot;[];['initrd.img', 'TRANS.TBL', 'vmlinuz'] (PyCDC)>dir F:\back 指定保存/搜索目录为:'F:\back' (PyCDC)>find images 指定搜索关键词为:'images' 找到目标文件:1.cdc E:\iso\CentOS-6.8-x86_64-bin-DVD1;['EFI', 'images', 'isolinux', '[BOOT]'];['.discinfo', '.treeinfo', 'CentOS_BuildTag', 'EULA', 'GPL', 'RELEASE-NOTES-en-US.html', 'RPM-GPG-KEY-CentOS-6', 'RPM-GPG-KEY-CentOS-Debug-6', 'RPM-GPG-KEY-CentOS-Security-6', 'RPM-GPG-KEY-CentOS-Testing-6', 'TRANS.TBL'] E:\iso\CentOS-6.8-x86_64-bin-DVD1\images;['pxeboot'];['efiboot.img', 'efidisk.img', 'install.img', 'TRANS.TBL'] E:\iso\CentOS-6.8-x86_64-bin-DVD1\images\pxeboot;[];['initrd.img', 'TRANS.TBL', 'vmlinuz'] 搜索子目录F:\back\back1 搜索子目录F:\back\back1\back11 搜索子目录F:\back\back2 搜索子目录F:\back\bak 找到目标文件:2.cdc E:\iso\CentOS-6.8-x86_64-bin-DVD1;['EFI', 'images', 'isolinux', '[BOOT]'];['.discinfo', '.treeinfo', 'CentOS_BuildTag', 'EULA', 'GPL', 'RELEASE-NOTES-en-US.html', 'RPM-GPG-KEY-CentOS-6', 'RPM-GPG-KEY-CentOS-Debug-6', 'RPM-GPG-KEY-CentOS-Security-6', 'RPM-GPG-KEY-CentOS-Testing-6', 'TRANS.TBL'] E:\iso\CentOS-6.8-x86_64-bin-DVD1\images;['pxeboot'];['efiboot.img', 'efidisk.img', 'install.img', 'TRANS.TBL'] E:\iso\CentOS-6.8-x86_64-bin-DVD1\images\pxeboot;[];['initrd.img', 'TRANS.TBL', 'vmlinuz'] (PyCDC)>find cd 指定搜索关键词为:'cd' 找到目标文件:1.cdc 文件1.cdc中,找不到关键词cd 找到目标文件:11.cdc 文件11.cdc中,找不到关键词cd 搜索子目录F:\back\\back1 搜索子目录F:\back\\back1\back11 搜索子目录F:\back\\back2 搜索子目录F:\back\\bak 找到目标文件:2.cdc 文件2.cdc中,找不到关键词cd (PyCDC)>q
以上代码加入了“在手动指定了不存在的保存/搜索目录时将自动创建该目录”的功能,实现了完成版本的PyCDC!
原文地址:http://blog.51cto.com/9473774/2090518
时间: 2024-10-09 22:47:24