没有完美的软件, 够用并且容易使用的软件已经算是完美的了
今天整理这几天的代码
- # -*- coding: utf-8 -*-
- import os
- import sys
- import cmd
- from cdctools import *
- 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():
- # 判断是否有关键词在行中
- if keyword in line:
- print(line)
- def mkdir(pathname):
- '''自动创建不存在的目录'''
- # 去除首尾空格
- path=pathname.strip()
- # 去除尾部 \ 符号
- path=pathname.rstrip("\\")
- # 判断路径是否存在
- if not os.path.exists(pathname):
- try:
- # 创建目录
- os.makedirs(pathname)
- print('指定的目录不存在, 将自动为您创建')
- except FileNotFoundError as reason:
- print(reason)
- 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)>q
以上代码加入了在手动指定了不存在的保存 / 搜索目录时将自动创建改目录的功能, 实现了完成版本的 PyCDC!
来源: http://www.bubuko.com/infodetail-2536856.html