會用python把linux命令寫一遍的人,進大廠有多容易?

在這裏插入圖片描述

看過這篇《2000字諫言,給那些想學Python的人,建議收藏後細看!》的讀者應該都對一個命令有點印象吧?沒錯,就是 linux 中常常會用到的 ls 命令。css

文章中我就提到如何提高本身的 python 能力呢?直接找項目寫,可是做爲零基礎 / 小白 / 入門 的你來講作一個博客還要學 web 框架、html、css、js,又成爲了阻礙你寫實際項目的阻礙。html

因此我就推薦了這個命令:ls。寫一個 ls 很是簡單,你只須要會一點 linux 的基礎知識,知道 ls 能作什麼就行了。python

那今天就給你們碼了一個哪哪能用的 ls.py ,沒錯,windows 也能夠哦~linux

演示環境

  • 操做系統:windows10
  • python版本:python 3.7
  • idea:pycharm 2018.2
  • 使用模塊:argparse, os

瞭解argparse模塊

argparse是python的標準庫,他可使咱們很友好的編寫命令行界面,而且能夠自動生成幫助文檔和使用消息,還能在參數無效的時候發出錯誤。web

argparse.ArgumentParse類參數理解

  1. prog:改變應用的名字,咱們可使用%(prog)s引用應用的名字,默認的應用名字爲文件名。
  2. usage: 顯示這個命令用法, 通常用來顯示參數的用法
  3. description:顯示這個命令的幫助信息
  4. epilog: 顯示命令的幫助信息,位置在參數的下面

argparse.ArgumentParser.add_argument函數理解

  1. name | flags: 指定參數的名字
  2. action: 指定命令行參數,內置爲如下幾種windows

    • store: 默認值,僅僅保存參數值。
    • store_const: 與store基本一致,可是隻保存const關鍵字指定的值,其它的值會報錯
    • store_true | store_false: 與store_const基本一致,只保存True和False
    • append: 將相同參數的不一樣值保存在一個list中
    • count: 統計參數出現的次數
    • help: 輸出程序的幫助信息
    • version: 輸出程序版本信息
  3. nargs: 將不一樣數量的值與一個參數關聯起來app

    • nargs=N:N爲整數
    • nargs='?'
    • nargs='*': 將全部的參數保存在列表中
    • nargs='+': 將全部的參數保存在列表中,可是至少得有一個參數
    • nargs=argparse.REMAINDER: 其他的參數所有保存在一個list中
  4. default: 若是沒有傳入這個參數,默認使用default參數的值
  5. type: 接收到的參數會通過這個參數對應的函數處理。
  6. choices: 將參數指定在一個範圍內,超出就報錯
  7. required: 指定參數是否爲必傳參數。
  8. dest: 自定義參數的名稱,默認名稱爲 「- 後面的值」 或者 「-- 後面的值」。

編寫ls命令腳本

這裏咱們就簡單的指定三個參數.框架

  • -a: 添加 -a 參數,顯示隱藏文件。
  • -r: 添加 -r 參數,遞歸顯示文件夾下面的文件。
  • -d: 指定顯示目錄,若是不指定,默認爲當前目錄。

首先咱們使用 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本機器學習電子書

相關文章
相關標籤/搜索