在 Python 中,我們有許多用於執行各種任務的內置模塊,我們希望使用 Python 模塊執行的任務之一是查找和定位系統中存在的所有文件,這遵循類似的模式。這種相似的模式可以是文件擴展名、文件名前綴,或者兩個或多個文件之間的任何相似性。我們有許多不同的 Python 模塊,通過這些模塊,我們可以使用 Python 程序輕鬆執行此任務,但並非所有模塊都像其他模塊一樣高效。在本教程中,我們將學習這樣一個高效的模塊,即 Python 中的 glob 模塊,通過它,我們可以在程序中使用特定的模式來執行文件匹配。我們將詳細了解 Python 中的 glob 模塊,如何在程序中使用它,它的關鍵特性是什麼,以及這個模塊的應用。
Python 中的glob
模塊
在 Python glob 模塊的幫助下,我們可以搜索所有路徑名,尋找與特定模式(由我們定義)匹配的文件。文件匹配的指定模式是根據 Unix shell 規定的規則定義的。對於特定的模式文件匹配,通過遵循這些規則獲得的結果在程序的輸出中以任意順序返回。在使用文件匹配模式時,我們必須滿足 glob 模塊的一些要求,因為該模塊可以遍曆本地磁碟中某個位置的文件列表。該模塊將主要瀏覽磁碟中那些僅遵循特定模式的文件列表。
模式匹配函數
在 Python 中,我們有幾個函數可以用來列出與我們在程序的函數中定義的特定模式相匹配的文件。在這些函數的幫助下,我們可以在輸出中以任意順序獲得與指定文件夾中給定模式匹配的文件的結果列表。
我們將在本節中討論以下功能:
- fnmatch()
- scandir()
- path.expandvars()
- path.expanduser()
上面給出的列表中的前兩個函數,即 fnmatch.fnmatch() 和 os.scandir()函數,實際上是用來執行模式匹配任務的,而不是通過調用 Python 中的子 shell。這兩個函數執行模式匹配任務,並以任意順序獲得所有文件名的列表。這裡有一個陷阱,glob 模塊將所有以點()開頭的文件視為特例。)這在 fnmatch.fnmatch()功能中是非常不可能的。
列表中給出了最後兩個函數,即 os.path.expandvars() 和 os.path.expanduser() 函數可用於文件名模式匹配任務中的 shell 和 tilde 變數擴展。
模式規則
如果我們中的任何人認為我們可以定義或使用任何模式來執行模式匹配文件名任務,那麼讓我們在這裡澄清這是不可能的。我們不能定義任何模式或使用任何模式來收集具有相同的文件列表。在為 glob 模塊中的文件名模式匹配函數定義模式時,我們必須遵循一組特定的規則。
在這一節中,我們將討論所有這些規則,我們必須牢記並遵守它們,同時為文件名模式匹配函數定義一個模式。我們將只簡單地討論這些規則,不會深入討論它們,因為它們不是我們在本教程中的主要關注點。
下面是我們在 glob 模塊的模式匹配函數中定義的模式規則集:
- 在模式匹配中,我們必須遵循 UNIX 路徑擴展的所有標準規則集。
- 我們在模式內部定義的路徑應該是絕對的或者是相對的,不能在模式內部定義任何不明確的路徑。
- 模式中允許的特殊字元只有兩個通配符,即’ *,?’模式內部可以表達的正常字元用[]表示。
- glob 模塊函數的模式規則應用於文件名段(在函數中提供),它在路徑分隔符處停止,即文件的「/」。
這些是我們在 glob 模塊函數中為文件名模式匹配任務定義的模式的一些一般規則,為了成功執行任務,我們必須遵循這些規則。
glob
模塊的應用
我們已經討論了當我們在磁碟上尋找類似的文件時,模式匹配對我們的幫助有多大。在這裡,我們將討論 glob 模塊的應用以及它對我們的幫助。
下面列出了 Python glob 模塊的一些應用,我們可以在給定的函數中使用這個模塊:
- 有時,我們希望搜索一個文件,該文件的名稱中有某個前綴,許多文件名稱中間有任何公共字元串,或者有相同的某個擴展名。現在,為了執行這個任務,我們可能必須編寫一個代碼來掃描整個目錄,然後它會產生結果。取而代之的是 glob 模塊在這種情況下會非常有幫助,因為我們可以使用 glob 模塊的功能,非常容易地執行這個任務,並且可以節省我們的時間。
- 除此之外, Glob 模塊在我們的一個程序必須查找給定文件系統中所有文件的列表時也非常有用,這些文件的名稱與相似的模式相匹配。Glob 模塊可以很容易地執行這個和那個任務,而不用在其他子 Shell 中打開程序的結果。
因此,通過查看 glob 模塊的應用,我們可以說這個模塊對我們來說有多重要,我們可以在哪裡使用它來降低代碼的複雜性並節省我們的時間。
glob
模塊功能
現在,我們將討論 glob 模塊的更多功能,並了解它們在 Python 程序中的工作方式。我們還將了解這些函數如何幫助我們完成模式匹配任務。請看下面我們在 glob 模塊中擁有的函數列表,在這些函數的幫助下,我們可以非常順利地執行文件名模式匹配的任務:
- iglob()
- glob()
- 逃避()
現在,我們將簡要討論這些函數,然後通過在 Python 程序中使用它們來理解這些函數的實現。我們將在一個示常式序中使用上面給出的每個函數,並在輸出中獲得遵循類似模式(我們將在函數中定義)的文件名列表。
1。iglob()函數:glob 模塊的 iglob()函數非常有助於在輸出中產生文件列表的任意值。我們可以用 iglob()方法創建一個 Python 生成器。我們可以使用 glob 模塊創建的 Python 生成器列出給定目錄下的文件。這個函數在被調用時也會返回一個迭代器,它返回的迭代器會產生值(文件列表),而不會同時存儲所有的文件名。
語法:以下是在 Python 程序中使用 glob 模塊的 iglob() 函數的語法:
iglob(pathname, *, recursive=False)
我們可以在 iglob()函數的語法中看到,它總共取了三個參數,可以定義如下:
(I)pathname:pathname 參數是函數的可選參數,我們甚至可以在處理與我們的 Python 安裝位置相同的文件目錄時將其留下。我們必須定義路徑名,從中收集遵循類似模式(也在函數中定義)的文件列表。
(ii)遞歸:它也是 iglob()函數的可選參數,其中只取 bool 值(真或假)。遞歸參數用於設置函數是否遵循遞歸方法來查找文件名。
*(iii)「」:*這是 iglob()函數的強制參數,因為這裡我們必須定義 iglob()函數將收集文件名並在輸出中列出它們的模式。我們在 iglob()函數中為模式匹配定義的模式(如文件擴展名)應該以「」符號開始。
現在,讓我們在一個示常式序中使用這個 iglob()函數,這樣我們就可以更好地理解它的實現和功能。
例 1:
看看下面這個實現了 iglob()函數的 Python 程序:
# Import glob module in the program
import glob as gb
# Initialize a variable
inVar = gb.iglob("*.py") # Set Pattern in iglob() function
# Returning class type of variable
print(type(inVar))
# Printing list of names of all files that matched the pattern
print("List of the all the files in the directory having extension .py: ")
for py in inVar:
print(py)
輸出:
<class 'generator'>
List of the all the files in the directory having extension .py:
adding.py
changing.py
code#1.py
code#2.py
code-3.py
code-4.py
code.py
code37.py
code_5.py
code_6.py
configuring.py
說明:
我們首先導入了 glob 模塊,這樣我們就可以在程序中使用它的 iglob()函數。之後,我們初始化了一個使用 iglob()函數的變數,在 iglob()函數中,我們定義了函數將執行文件名模式匹配的模式。我們在 iglob()函數中定義的模式是所有帶有的文件。py 分機,即 *“。py”** 。之後,我們返回了已經初始化的變數的類類型。之後,我們在變數上使用了一個 for
循環來列印所有文件名的列表,這些文件名與我們在其中定義的模式的 iglob()函數相匹配。
正如我們在輸出中看到的,第一個程序已經列印了初始化變數的類類型,然後它列印了帶有「」的文件列表。py 」分機。
2。glob()函數:藉助 glob()函數,我們還可以得到匹配特定模式的文件列表(我們必須在函數內部定義那個特定模式)。glob()函數返回的列表將是一個字元串,根據我們在函數內部定義的路徑,它應該包含一個路徑說明。glob()函數的字元串或迭代器實際上返回的值與 iglob()函數返回的值相同,但沒有在其中存儲這些值(文件名)。
語法:
下面是在 Python 程序中使用 glob 模塊的 glob() 函數的語法:
glob(pathname, *, recursive = True)
正如我們在 glob()函數的語法中所看到的那樣,它總共需要三個參數,就像 iglob()函數一樣。glob()函數中定義的三個參數與我們在上面的 iglob()函數中讀到的參數相同。現在,讓我們在一個示常式序中使用這個 glob()函數,這樣我們就可以更好地理解它的實現和功能。
示例 2: 看看下面這個實現了 glob()函數的 Python 程序:
# Import glob module in the program
import glob as gb
# Initialize a variable
genVar = gb.glob("*.py") # Set Pattern in glob() function
# Printing list of names of all files that matched the pattern
print("List of the all the files in the directory having extension .py: ")
for py in genVar:
print(py)
輸出:
List of the all the files in the directory having extension .py:
adding.py
changing.py
code#1.py
code#2.py
code-3.py
code-4.py
code.py
code37.py
code_5.py
code_6.py
configuring.py
正如我們在上面的示常式序中看到的,我們遵循了與示例 1 中使用 iglob()函數相同的邏輯。程序已經返回了與我們在 glob()函數中設置的模式相匹配的所有文件名的列表。
3。escape()函數:escape()變得非常有影響力,因為它允許我們轉義給定的字元序列,這是我們在函數中定義的。escape()函數對於查找文件名中有特定字元(我們將在函數中定義)的文件非常方便。它將通過匹配文件名中的任意字面值字元串和其中的特殊字元來匹配序列。
語法:
下面是在 Python 程序中使用 glob 模塊的 escape() 函數的語法:
>> escape(pathname)
escape()應該與 glob()或 iglob()函數一起使用,這樣我們就可以在輸出中列印文件名列表。現在,讓我們在一個示常式序中使用這個 escape()函數,這樣我們就可以更好地理解它的實現和功能。
示例 3: 看看下面這個實現了 escape()函數的 Python 程序:
# Import glob module in the program
import glob as gb
# Initialize a variable
charSeq = "-_#"
print("Following is the list of filenames that match the special character sequence of escape function: ")
# Using nested for loop to get the filenames
for splChar in charSeq:
# Pathname for the glob() function
escSet = "*" + gb.escape(splChar) + "*" + ".py"
# Printing list of filenames with glob() function
for py in (gb.glob(escSet)):
print(py)
輸出:
Following is the list of filenames that match the special character sequence of escape function:
code-3.py
code-4.py
code_5.py
code_6.py
code#1.py
code#2.py
說明:
我們首先為 escape()序列定義了一個字元序列,這樣 escape()函數將收集所有包含該特殊字元序列的文件名。我們使用了一個嵌套的 for
循環,首先,我們從 escape()函數創建了 glob()函數的路徑名。之後,我們使用 glob()函數中的路徑名來列印與前面定義的特殊字元序列相匹配的文件名列表。
正如我們在輸出中所看到的,我們在程序中定義的所有文件名的名稱中都有特殊的字元序列。
結論
所以,由於我們已經使用了 glob 模塊的函數,即 glob(),escape()和 iglob()函數,我們現在可以很容易地理解 glob 模塊及其函數的功能。這樣,我們還可以描述 glob 模塊如何非常有助於執行文件名模式匹配任務,以及我們如何獲得遵循特定模式的所有文件的列表。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/272054.html