標籤:mkdir
沒有完美的軟體,夠用並且容易使用的軟體已經算是完美的了。
今天整理這幾天的代碼
# -*- coding: utf-8 -*-import osimport sysimport cmdclass 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!
《可愛的Python》讀書筆記(六)