黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

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

系統(tǒng) 1887 0

看過這篇《2000字諫言,給那些想學(xué)Python的人,建議收藏后細(xì)看!》的讀者應(yīng)該都對一個命令有點印象吧?沒錯,就是 linux 中經(jīng)常會用到的 ls 命令。

文章中我就提到如何提升自己的 python 能力呢?直接找項目寫,但是作為零基礎(chǔ) / 小白 / 入門 的你來說做一個博客還要學(xué) web 框架、html、css、js,又成為了阻礙你寫實際項目的阻礙。

所以我就推薦了這個命令:ls。寫一個 ls 非常簡單,你只需要會一點 linux 的基礎(chǔ)知識,知道 ls 能做什么就好了。

那今天就給大家碼了一個哪哪能用的 ls.py ,沒錯,windows 也可以哦~

演示環(huán)境

  • 操作系統(tǒng):windows10
  • python版本:python 3.7
  • idea:pycharm 2018.2
  • 使用模塊:argparse, os

了解argparse模塊

argparse是python的標(biāo)準(zhǔn)庫,他可以使我們很友好的編寫命令行界面,并且可以自動生成幫助文檔和使用消息,還能在參數(shù)無效的時候發(fā)出錯誤。

argparse.ArgumentParse類參數(shù)理解

  1. prog:改變應(yīng)用的名字,我們可以使用 %(prog)s 引用應(yīng)用的名字,默認(rèn)的應(yīng)用名字為文件名。
  2. usage: 顯示這個命令用法, 一般用來顯示參數(shù)的用法
  3. description:顯示這個命令的幫助信息
  4. epilog: 顯示命令的幫助信息,位置在參數(shù)的下面

argparse.ArgumentParser.add_argument函數(shù)理解

  1. name | flags: 指定參數(shù)的名字
  2. action: 指定命令行參數(shù),內(nèi)置為以下幾種

    • store: 默認(rèn)值,僅僅保存參數(shù)值。
    • store_const: 與store基本一致,但是只保存const關(guān)鍵字指定的值,其它的值會報錯
    • store_true | store_false: 與store_const基本一致,只保存True和False
    • append: 將相同參數(shù)的不同值保存在一個list中
    • count: 統(tǒng)計參數(shù)出現(xiàn)的次數(shù)
    • help: 輸出程序的幫助信息
    • version: 輸出程序版本信息
  3. nargs: 將不同數(shù)量的值與一個參數(shù)關(guān)聯(lián)起來

    • nargs=N:N為整數(shù)
    • nargs='?'
    • nargs='*': 將所有的參數(shù)保存在列表中
    • nargs='+': 將所有的參數(shù)保存在列表中,但是至少得有一個參數(shù)
    • nargs=argparse.REMAINDER: 其余的參數(shù)全部保存在一個list中
  4. default: 如果沒有傳入這個參數(shù),默認(rèn)使用default參數(shù)的值
  5. type: 接收到的參數(shù)會經(jīng)過這個參數(shù)對應(yīng)的函數(shù)處理。
  6. choices: 將參數(shù)指定在一個范圍內(nèi),超出就報錯
  7. required: 指定參數(shù)是否為必傳參數(shù)。
  8. dest: 自定義參數(shù)的名稱,默認(rèn)名稱為 “- 后面的值” 或者 “-- 后面的值”。

編寫ls命令腳本

這里我們就簡單的指定三個參數(shù).

  • -a: 添加 -a 參數(shù),顯示隱藏文件。
  • -r: 添加 -r 參數(shù),遞歸顯示文件夾下面的文件。
  • -d: 指定顯示目錄,如果不指定,默認(rèn)為當(dāng)前目錄。

首先我們使用 ArgumentParser 類來指定參數(shù)。

          
            import os
import argparse

parser = argparse.ArgumentParser(prog='ls', description='顯示文件夾下的文件')

# 指定參數(shù)
parser.add_argument('-a', '--all', const=True, nargs='?', help='是否顯示隱藏文件')
parser.add_argument('-d', '--directory', help='指定顯示的目錄,如果不指定,默認(rèn)為當(dāng)前目錄')
parser.add_argument('-r', '--recursion', const=True, nargs='?', help='是否遞歸顯示')

# 解析參數(shù)
args = parser.parse_args()

# 拿到directory參數(shù),如果沒有傳這個參數(shù),為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 = '.'
          
        

我們規(guī)定好參數(shù)之后,接下來就是具體ls的實現(xiàn)。我們封裝一個 LsCommand 類

          
            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: 列出當(dāng)前文件夾下面的所有文件和文件夾
        # 遍歷目錄下的文件,文件夾
        pass

    def show_file_or_dir(self, file, prefix=''):
        # 如果不顯示隱藏文件

        # 打印前綴和文件名
        pass

    def run(self):
        '''
        運行l(wèi)s命令
        :return:
        '''
        # os.listdir(dir) 得到dir目錄下所有文件,文件夾

        # 遍歷self.directory目錄先所有文件,文件夾

        pass
          
        

ls這個類我們也封裝好了,接下來我們將得到的參數(shù)傳入 LsCommand 類中,然后運行,就可以愉快的得出結(jié)果。

          
            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

關(guān)注公眾號「 Python專欄 」,后臺回復(fù)「 機(jī)器學(xué)習(xí)電子書 」免費獲取100本機(jī)器學(xué)習(xí)電子書


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論