看過這篇《2000字諫言,給那些想學Python的人,建議收藏後細看!》的讀者應該都對一個命令有點印象吧?沒錯,就是 linux 中常常會用到的 ls 命令。css
文章中我就提到如何提高本身的 python 能力呢?直接找項目寫,可是做爲零基礎 / 小白 / 入門 的你來講作一個博客還要學 web 框架、html、css、js,又成爲了阻礙你寫實際項目的阻礙。html
因此我就推薦了這個命令:ls。寫一個 ls 很是簡單,你只須要會一點 linux 的基礎知識,知道 ls 能作什麼就行了。python
那今天就給你們碼了一個哪哪能用的 ls.py ,沒錯,windows 也能夠哦~linux
argparse是python的標準庫,他可使咱們很友好的編寫命令行界面,而且能夠自動生成幫助文檔和使用消息,還能在參數無效的時候發出錯誤。web
%(prog)s
引用應用的名字,默認的應用名字爲文件名。action: 指定命令行參數,內置爲如下幾種windows
nargs: 將不一樣數量的值與一個參數關聯起來app
這裏咱們就簡單的指定三個參數.框架
首先咱們使用 ArgumentParser 類來指定參數。機器學習
import os import argparse parser = argparse.ArgumentParser(prog='ls', description='顯示文件夾下的文件') # 指定參數 parser.add_argument('-a', '--all', const=True, nargs='?', help='是否顯示隱藏文件') parser.add_argument('-d', '--directory', help='指定顯示的目錄,若是不指定,默認爲當前目錄') parser.add_argument('-r', '--recursion', const=True, nargs='?', help='是否遞歸顯示') # 解析參數 args = parser.parse_args() # 拿到directory參數,若是沒有傳這個參數,爲None directory = args.directory # 若是directory有值 if directory: # 若是指定目錄不存在,拋出異常 if not os.path.exists(directory): raise ValueError(f'{directory} does`t exist') # 若是directory不是一個目錄,拋出異常 if not os.path.isdir(directory): raise ValueError(f'{directory} is not a directory') # 若是directory爲None,給directory賦值 else: directory = '.'
咱們規定好參數以後,接下來就是具體ls的實現。咱們封裝一個 LsCommand 類ide
class LsCommand(): def __init__(self, show_all=False, directory='.', recursion=False): ''' :param show_all: 是否顯示隱藏文件 :param directory: 指定的文件目錄 :param recursion: 是否遞歸顯示目錄下的文件 ''' self.show_all = show_all self.recursion = recursion self.directory = os.path.abspath(directory) def handle_dir(self, directory, grade=1, placeholder='--'): ''' 處理目錄 :param directory: 文件目錄 :param grade: 目錄層級 :param placeholder: 子目錄文件前面的佔位符 :return: ''' # 判斷是否爲文件夾 # grade是否增長過了 # os.listdir: 列出當前文件夾下面的全部文件和文件夾 # 遍歷目錄下的文件,文件夾 pass def show_file_or_dir(self, file, prefix=''): # 若是不顯示隱藏文件 # 打印前綴和文件名 pass def run(self): ''' 運行ls命令 :return: ''' # os.listdir(dir) 獲得dir目錄下全部文件,文件夾 # 遍歷self.directory目錄先全部文件,文件夾 pass
ls這個類咱們也封裝好了,接下來咱們將獲得的參數傳入 LsCommand 類中,而後運行,就能夠愉快的得出結果。
ls = LsCommand(bool(args.all), directory, bool(args.recursion)) ls.run()
python ls.py
python ls.py -a
python ls.py -a -r
python ls.py -d ./temp
關注公衆號「Python專欄」,後臺回覆「機器學習電子書」免費獲取100本機器學習電子書