Python 中的參數解析

在本文中,我們將學習 Python 中的 argparse 模塊。我們將探索它的工作原理和功能。對於基礎開發人員、工程師和計算機科學家來說,這是一個非常重要的話題。眾所周知,Python 因其包含豐富的庫而廣受歡迎。如果開發人員為命令行編寫腳本,他/她還需要傳遞我們可以使用 argparse 庫創建的命令行參數。

在本文中,我們將探討以下與 argparse 相關的主題。

  • 什麼是命令行界面?
  • Python 中的 argparse 是什麼?
  • 如何實現 Python argparse 庫來創建命令行界面?
  • 命令行界面中的參數類型
  • Python 參數解析位置參數
  • Python 參數解析位置參數默認值
  • 使用可選參數的簡稱
  • 用 argparse 組合可選參數和位置參數
  • 結論

讓我們了解 argparse 是什麼,以及如何實現它。

什麼是命令行界面?

命令行界面也稱為 CLI,它與命令行腳本進行交互。 Python 提供了許多允許我們使用 CLI 的庫,但是 Python argparse 是當前場景中最適合的庫。

命令行界面是如何工作的?

在深入這個主題之前,我們需要了解命令行界面是如何工作的?所以打開命令行終端,輸入 ls 命令即可獲得系統中可用文件的完整列表。


C:\Users\DEVANSH SHARMA>ls

輸出:

face.png
Favorites
file1.txt
file2.txt
flower.jpg
forest.jpg
Gow-0.8.0.exe
gradients.jpg
hadoop-2.8.0
hadoop-2.8.0.tar.gz
hello_fullstack
highway.mp4
IBA_IOAPDATA
innocentcat
IntelGraphicsProfiles
international-cricket-players-data.zip
Iris.csv
iris.zip
java_error_in_pycharm_6408.log
java_error_in_pycharm_6684.log
jtp_logo.png
linear_reg
linear_reg.zip
Links
Local Settings
main_image.jpg
mario.png
metastore_db
MicrosoftEdgeBackups
Music
My Documents
mycus
9c409ba1dd3f}.TMContainer00000000000000000001.regtrans-ms
NTUSER.DAT{42939bbc-edb6-11ea-9c24-9c409ba1dd3f}.TMContainer00000000000000000002.regtrans-ms
ntuser.ini
PySpark DataFrame.ipynb
PySpark RDD.ipynb
PySpark SQL.ipynb
PySpark UDF.ipynb
tesseract-3.02.02-win32-lib-include-dirs
tesseract-3.02.02-win32-lib-include-dirs.zip

正如我們在上面的輸出中看到的,ls 命令返回當前目錄中可用的許多文件。

現在,我們將通過在命令行中添加選項-l 來運行 ls 命令。


C:\Users\DEVANSH SHARMA>ls -l

輸出:

total 717704
drw-rw-rw-   2 DEVANSH SHARMA 0         0 2020-04-07 13:25 __pycache__
dr--r--r--   2 DEVANSH SHARMA 0         0 2020-09-03 13:42 3D Objects
drw-rw-rw-   2 DEVANSH SHARMA 0         0 2014-01-03 15:37 8235702-a50f7c449c41b6dc8eb87d8d393eeff62121b392
drw-rw-rw-  20 DEVANSH SHARMA 0     32768 2020-12-07 16:20 Anaconda3
drw-rw-rw-   5 DEVANSH SHARMA 0         0 2020-09-03 13:02 AppData
drw-rw-rw-   2 DEVANSH SHARMA 0      8192 2021-02-11 21:39 Application Data
-rw-rw-rw-   1 DEVANSH SHARMA 0       224 2019-11-13 14:38 array.mat
-rw-rw-rw-   1 DEVANSH SHARMA 0     69548 2019-12-03 14:18 ballon.jpg
-rw-rw-rw-   1 DEVANSH SHARMA 0     69548 2019-12-03 14:20 baloon.jpg
-rw-rw-rw-   1 DEVANSH SHARMA 0      1857 2019-10-15 12:16 binary.png
-rw-rw-rw-   1 DEVANSH SHARMA 0         5 2020-04-01 16:46 binfile.bin
-rw-rw-rw-   1 DEVANSH SHARMA 0     13911 2019-10-16 11:52 blob.jpg
-rw-rw-rw-   1 DEVANSH SHARMA 0    244879 2019-10-14 14:19 book1.jpg
-rw-rw-rw-   1 DEVANSH SHARMA 0     10064 2020-04-07 16:35 calculation.py
-rw-rw-rw-   1 DEVANSH SHARMA 0     23073 2019-12-06 15:30 calibresult.jpg
-rw-rw-rw-   1 DEVANSH SHARMA 0       336 2019-11-29 15:11 cat.jpeg
-rw-rw-rw-   1 DEVANSH SHARMA 0         0 2019-12-05 12:34 cat.jpg
-rw-rw-rw-   1 DEVANSH SHARMA 0     13001 2019-10-13 17:22 cat_16x9.jpg
-rw-rw-rw-   1 DEVANSH SHARMA 0    249726 2019-10-13 15:02 cat1.jpg
-rw-rw-rw-   1 DEVANSH SHARMA 0      5633 2019-12-04 11:16 coin.jpg
-rw-rw-rw-   1 DEVANSH SHARMA 0      8652 2019-12-04 11:23 coin1.png
-rw-rw-rw-   1 DEVANSH SHARMA 0     59918 2020-03-02 11:22 comic.png
dr--r--r--   2 DEVANSH SHARMA 0         0 2020-09-03 13:42 Contacts

Python 中的 argparse 是什麼?

Python argparse 是一個命令行解析模塊,建議使用命令行參數。該模塊於 2011 年 2 月 20 日作為 Python 標準庫的一部分發佈。

它類似於 getopt模塊 ,但使用起來略顯吃力,執行同樣的任務需要更多的代碼行。然而,argparse 模塊是 Python getopt 和 optparse 模塊的更好替代。它提供了以下幾個重要特性。

  • 它允許我們使用位置參數。
  • 它允許我們自定義前綴字符。
  • 它支持單個選項的可變參數數量。
  • 它支持子命令。

如何實現 argparse 庫來創建命令行界面?

讓我們看下面這個簡單的例子來理解 Python 中 argparse 模塊的工作原理。

示例- 在下面的示例中,我們使用arg parse模塊創建了一個簡單的 Python 程序來執行添加操作。我們將通過命令行界面傳遞參數。


# importing argparse module
import argparse
parser = argparse.ArgumentParser()

# creating two variables using the add_argument method
parser.add_argument("num1", help = "first number")
parser.add_argument("num2", help = "second number")
parser.add_argument("operation", help = "operation")

我們已經導入了 argparse 模塊,並創建了一個簡單的解析器,將在整個程序中使用。我們調用了 add_argument() 方法,傳遞了兩個參數- num1 和 help。我們已經將上述代碼保存在名為 code.py. 的文件中

為了運行這個程序,我們打開命令行界面並運行上面的文件。

命令


C:\Users\DEVANSH SHARMA\PycharmProjects\Elasticsearch>python code.py

當我們按回車鍵時,它將顯示以下輸出。

輸出:

usage: code.py [-h] num1 num2 operation
code.py: error: the following arguments are required: num1, num2, operation

正如我們所看到的,它顯示了錯誤,因為我們沒有傳遞所需的參數。

現在,我們將傳遞可選參數- h,它基本上用於幫助。

命令


C:\Users\DEVANSH SHARMA\PycharmProjects\Elasticsearch>python code.py -h

它將顯示以下輸出。

usage: code.py [-h] num1 num2 operation

positional arguments:
  num1        first number
  num2        second number
  operation   operation

optional arguments:
  -h, --help  show this help message and exit

我們得到了在 Python 程序中定義的所有參數列表。現在,我們將通過添加以下操作來打印參數和操作。當我們執行時。parse_args(),我們得到一個 Namespace 對象,它包含從命令行接收的每個輸入參數的簡單屬性。


args = parser.parse_args()

print(args.num1)
print(args.num2)
print(args.operation)

我們使用 args 變量將參數打印到控制台。默認情況下,它接受輸入,因此我們需要將其類型轉換為整數。


n1 = int(args.num1)
n2 = int(args.num2)

為了將這兩個數字相加,我們在代碼中定義了加法操作。


result = n1 + n2
print("The Result is : ",result)
C:\Users\DEVANSH SHARMA\PycharmProjects\Elasticsearch>python code.py 20 30 add
20
30
add
The Result is :  50

示例- 1 使用 argparse 的簡單計算器程序


# importing argparse module
import argparse
parser = argparse.ArgumentParser()

# creating two variables using the add_argument method
parser.add_argument("num1", help = "first number")
parser.add_argument("num2", help = "second number")
parser.add_argument("operation", help = "operation")

args = parser.parse_args()

print(args.num1)
print(args.num2)
print(args.operation)

n1 = int(args.num1)
n2 = int(args.num2)

if args.operation == "add":
    result = n1 + n2
    print("The Result is : ",result)

elif args.operation == "sub":
    result = n1 - n2

elif args.operation == "mul":
    result = n1 * n2
elif args.operation == "div":
    result = n1 / n2
else:
    print("Unmatched Argument")

print("result is : ",result)

輸出:

命令行界面中的參數類型

我們可以向命令行界面相加兩個參數。

  • 位置參數
  • 可選參數

讓我們理解這兩個論點。

位置參數- 位置參數是我們在命令中用來操作的參數類型。我們將參數傳遞給命令並執行一些操作。它們的位置由它們的功能決定。這就是為什麼它們被稱為位置論證。

默認情況下,位置參數被視為字符串,但是我們可以在其他數據類型中進行類型轉換。

在前面的示例中,我們使用了位置參數來執行兩個數字之間的相加操作。

讓我們理解下面的代碼。

示例- 1


import argparse

parser = argparse.ArgumentParser()

# By default, it treats input number as string
parser.add_argument('num', help="Enter nmber to get square of it.")
args = parser.parse_args()
print(args.num**2)

輸出:

我們已經傳遞了 15,它返回了 1515,因為 argparse 被視為字符串。我們可以使用 type 屬性來糾正這一點。

示例-


import argparse

parser = argparse.ArgumentParser()

parser.add_argument('num', help="Enter number to get square of it.", type = int)
args = parser.parse_args()
print(args.num**2)

輸出:

現在,我們得到了想要的結果。

可選參數- 可選參數不是必需的。如果不傳遞給腳本,我們將不會得到錯誤。這些類型的參數以-單破折號或「-」雙破折號前綴開始。我們需要打電話給。add_parse() 傳遞可選參數。

讓我們理解下面的例子。

示例-


# importing argparse module
import argparse
parser = argparse.ArgumentParser()

# creating two variables using the add_argument method
parser.add_argument("--num1", help = "first number")
parser.add_argument("--num2", help = "second number")
parser.add_argument("--operation", help = "operation")

args = parser.parse_args()

print(args.num1)
print(args.num2)
print(args.operation)

n1 = int(args.num1)
n2 = int(args.num2)

if args.operation == "add":
    result = n1 + n2
    print("The Result is : ",result)

elif args.operation == "sub":
    result = n1 - n2

elif args.operation == "mul":
    result = n1 * n2
elif args.operation == "div":
    result = n1 / n2
else:
    print("Unmatched Argument")

print("result is : ",result)

當我們在不傳遞任何參數的情況下運行上述代碼時,它將顯示以下輸出。

輸出:

正如我們在上面的代碼中看到的,我們在沒有傳遞任何可選參數的情況下運行了腳本,它沒有返回錯誤,而是返回 none 。可選參數的幫助消息和數據類型與位置參數中的相同。

Python 參數解析位置參數

有時,我們需要在執行時在腳本中強制傳遞的參數。讓我們看一個它沒有通過的例子。

示例-


import argparse

parser = argparse.ArgumentParser()
parser.add_argument("example")
args = parser.parse_args()

if args.example == 'Hello Python':
    print('Welcome to Javatpoint')
else:
    print("Didn't make it!")

當我們使用不同的參數運行上述代碼時,它將顯示以下參數。

輸出:

如果參數沒有在命令行終端中傳遞,我們可以顯示錯誤。

Python 參數解析位置參數默認值

我們可以使用 argparse 模塊為變量或參數提供默認值。在前面的示例中,位置參數值在未提供時為空。讓我們理解下面的例子。

示例-


import argparse

parser = argparse.ArgumentParser()
parser.add_argument("example", default = "Hello How are you")
args = parser.parse_args()

if args.example == 'Hello':
    print('Welcome to Javatpoint')
else:
    print("Didn't make it!")

輸出:

將簡稱用作可選參數

傳遞許多可選參數會使我們的 Python 腳本變長。因此,我們也可以為參數指定簡稱。我們可以給參數取縮寫名;這將有助於我們保持 Python 腳本的簡短。

讓我們理解下面的例子。

示例-


import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-tut', '--tutorial', help="Best Tutorial ")
parser.add_argument('-w', '--writer', help="Technical Content")
args = parser.parse_args()

if args.tutorial == 'Javatpoint':
    print('Congratulation|| You made it!')

if args.writer == 'Devansh':
    print('Technical Writer.')

輸出:

C:\Users\DEVANSH SHARMA\PycharmProjects\Elasticsearch>python code.py -w Devansh
Technical Writer.   

在上面的代碼中,我們為兩個可選參數都指定了縮寫。我們可以用它的簡稱來訪問它。

用 argparse 組合可選參數和位置參數

我們可以使用 argparse 組合可選參數和位置參數,如下所示。讓我們理解下面的例子。

示例-


import argparse

parser = argparse.ArgumentParser()
# positionl Argument
parser.add_argument('tutorial', help="Best Tutorial ")
# optional argument 
parser.add_argument('-w', '--writer', help="Technical Content")
args = parser.parse_args()

if args.tutorial == 'Javatpoint':
    print('You made it!')

if args.writer == 'Devansh':
    print('Technical Writer.')

輸出:

C:\Users\DEVANSH SHARMA\PycharmProjects\Elasticsearch>python code.py Javatpoint -w Devansh
You made it!
Technical Writer.

我們已經將這兩種類型的參數傳遞給了命令行,並獲得了上面的輸出。

結論

到目前為止,我們已經討論了 argparse Python 模塊的非常重要的概念。我們已經學習了如何創建它們,以及如何通過命令行界面使用它們。我們還了解了 argparse 模塊是什麼,以及為什麼用 Python 編寫命令行腳本很重要。

該模塊幫助我們創建自解釋程序,並為用戶提供與我們的應用交互的方法。


原創文章,作者:FZAAJ,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/324786.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
FZAAJ的頭像FZAAJ
上一篇 2025-01-13 13:23
下一篇 2025-01-13 13:23

相關推薦

  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論