《可愛的Python》讀書筆記(六)

來源:互聯網
上載者:User

標籤: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》讀書筆記(六)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.