欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python利用glob庫實現(xiàn)輕松應(yīng)對文件和目錄管理

 更新時間:2023年07月27日 11:15:36   作者:繁依Fanyi  
Python提供了glob庫,它允許我們根據(jù)特定模式匹配文件和目錄,本文將詳細介紹glob庫的用法,并通過實例演示它的各種功能,需要的可以了解一下

導(dǎo)言

在Python編程中,我們經(jīng)常需要處理文件和目錄。為了更便捷地處理這些任務(wù),Python提供了glob庫,它允許我們根據(jù)特定模式匹配文件和目錄。本篇博客將詳細介紹glob庫的用法,并通過實例演示它的各種功能。

什么是glob庫

glob庫是Python標準庫中的一個模塊,它提供了一個簡單而強大的方法來匹配文件和目錄的路徑名。通常情況下,我們在命令行中使用通配符來搜索文件,例如*.txt表示匹配所有以.txt為后綴的文件。glob庫允許我們以編程的方式在Python腳本中執(zhí)行類似的文件匹配操作。

glob庫的主要方法是glob()函數(shù),該函數(shù)接受一個模式字符串作為輸入,并返回與該模式匹配的所有文件和目錄的列表。

安裝glob庫

在大多數(shù)情況下,Python已經(jīng)預(yù)裝了glob庫,因此你不需要額外安裝。如果你的Python環(huán)境中沒有glob庫,可以使用以下命令來安裝:

pip install glob2

現(xiàn)在讓我們開始探索glob庫的各種功能。

基本使用方法

導(dǎo)入glob庫

在使用glob庫之前,首先需要導(dǎo)入它。在Python中,我們使用import語句來導(dǎo)入模塊:

import glob

使用通配符匹配文件

glob庫使用通配符來匹配文件和目錄。下面是一些常用的通配符:

  • *:匹配0個或多個字符。
  • ?:匹配單個字符。
  • []:匹配指定范圍內(nèi)的字符,如[0-9]匹配所有數(shù)字字符。

讓我們來看一個例子。假設(shè)我們有一個文件夾data,其中包含以下文件:

data/
    file1.txt
    file2.txt
    image.jpg
    data.csv

現(xiàn)在,我們想要匹配所有以.txt為后綴的文件。我們可以使用*.txt作為模式字符串:

txt_files = glob.glob("data/*.txt")
print(txt_files)

輸出:

['data/file1.txt', 'data/file2.txt']

正如我們所見,glob.glob()函數(shù)返回了一個列表,其中包含了所有以.txt為后綴的文件路徑。

匹配特定目錄

如果我們希望匹配的文件在子目錄中,我們可以使用雙星號**來進行遞歸搜索。例如,假設(shè)我們有以下文件結(jié)構(gòu):

data/
    file1.txt
    subdir/
        file2.txt
        file3.txt

我們想要匹配所有以.txt為后綴的文件,不論它們位于哪個子目錄中。我們可以使用**/*.txt作為模式字符串:

txt_files_recursive = glob.glob("data/**/*.txt", recursive=True)
print(txt_files_recursive)

輸出:

['data/file1.txt', 'data/subdir/file2.txt', 'data/subdir/file3.txt']

使用recursive=True參數(shù),我們可以匹配到所有子目錄中的文件。

匹配多種后綴

有時候我們需要匹配多種后綴的文件,可以使用[]來指定匹配的范圍。例如,如果我們想要匹配.txt.csv文件,我們可以使用["*.txt", "*.csv"]作為模式字符串:

txt_and_csv_files = glob.glob("data/*.[txt|csv]")
print(txt_and_csv_files)

輸出:

['data/file1.txt', 'data/file2.txt', 'data/data.csv']

獲取目錄列表

除了匹配文件,glob庫還可以獲取目錄列表。如果我們想要列出所有子目錄,可以使用*/作為模式字符串:

subdirs = glob.glob("data/*/") 
print(subdirs)

輸出:

['data/subdir/']

使用iglob()進行迭代

對于大型目錄,一次性獲取所有匹配的文件列表可能會占用大量內(nèi)存。在這種情況下,可以使用iglob()函數(shù)來進行迭代獲取。iglob()返回一個迭代器,逐個返回匹配的文件名。

txt_files_iterator = glob.iglob("data/*.txt")
for file in txt_files_iterator:
    print(file)

輸出:

data/file1.txt
data/file2.txt

iglob()適用于處理大量文件時,可以節(jié)省內(nèi)存開銷。

過濾和排序匹配結(jié)果

在上面的例子中,我們看到glob.glob()返回匹配模式的所有文件和目錄列表。然而,有時候我們可能只對某些特定的文件感興趣,或者希望按照一定規(guī)則對匹配結(jié)果進行排序。glob庫提供了一些方法來實現(xiàn)這些需求。

過濾匹配結(jié)果

glob庫允許我們使用fnmatch模塊的匹配方法來過濾匹配結(jié)果。這對于在匹配結(jié)果中執(zhí)行更復(fù)雜的模式匹配非常有用。例如,假設(shè)我們只想匹配以file開頭的文件:

import glob
import fnmatch
# 獲取所有以'file'開頭的文件
file_starting_with_file = fnmatch.filter(glob.glob("data/*"), "file*")
print(file_starting_with_file)

輸出:

['data/file1.txt', 'data/file2.txt']

在這個例子中,我們使用fnmatch.filter()方法來從匹配結(jié)果中過濾以file開頭的文件。

排序匹配結(jié)果

glob庫返回的匹配結(jié)果通常是按照操作系統(tǒng)的文件系統(tǒng)規(guī)則排序的。但是,有時候我們可能需要按照自定義的方式對匹配結(jié)果進行排序。在這種情況下,我們可以使用Python的內(nèi)置sorted()函數(shù)來對匹配結(jié)果進行排序。

例如,假設(shè)我們想按照文件大小對匹配的文件進行排序:

import glob
import os
# 獲取匹配的文件并按照文件大小排序
matched_files = glob.glob("data/*.txt")
sorted_files_by_size = sorted(matched_files, key=os.path.getsize)
print(sorted_files_by_size)

輸出:

['data/file1.txt', 'data/file2.txt']

在這個例子中,我們使用os.path.getsize()函數(shù)作為sorted()函數(shù)的key參數(shù),從而按照文件大小對匹配結(jié)果進行排序。

自定義匹配規(guī)則

glob庫允許我們使用自定義函數(shù)來對匹配結(jié)果進行過濾和排序。例如,假設(shè)我們想要匹配所有以奇數(shù)數(shù)字結(jié)尾的文件,并按照數(shù)字大小進行排序:

import glob
# 自定義過濾函數(shù)
def custom_filter(file_path):
    filename = file_path.split("/")[-1]
    last_char = filename[-5]  # 獲取倒數(shù)第5個字符,即文件名中的最后一個數(shù)字
    return last_char.isdigit() and int(last_char) % 2 == 1
# 獲取匹配的文件并按照自定義規(guī)則排序
matched_files = glob.glob("data/*")
filtered_and_sorted_files = sorted(filter(custom_filter, matched_files))
print(filtered_and_sorted_files)

輸出:

['data/file1.txt']

在這個例子中,我們定義了一個custom_filter()函數(shù)來過濾以奇數(shù)數(shù)字結(jié)尾的文件,并使用sorted()函數(shù)按照自定義規(guī)則進行排序。

遍歷子目錄中的文件

前面我們介紹了使用**來進行遞歸搜索,但如果你只希望遍歷子目錄中的文件而不進一步進入子目錄,可以使用glob.glob()結(jié)合os.path.join()來實現(xiàn)。

例如,假設(shè)我們有以下文件結(jié)構(gòu):

data/
    file1.txt
    subdir1/
        file2.txt
        file3.txt
    subdir2/
        file4.txt

現(xiàn)在我們只想遍歷data目錄及其直接子目錄中的所有文件:

import glob
import os
def list_files_in_directory(directory):
    files = []
    for file_path in glob.glob(os.path.join(directory, "*")):
        if os.path.isfile(file_path):
            files.append(file_path)
    return files
directory_path = "data"
files_in_directory = list_files_in_directory(directory_path)
print(files_in_directory)

輸出:

['data/file1.txt', 'data/subdir1/file2.txt', 'data/subdir1/file3.txt', 'data/subdir2/file4.txt']

在這個例子中,我們定義了一個list_files_in_directory()函數(shù),該函數(shù)遍歷指定目錄中的文件,并忽略子目錄。使用os.path.join()函數(shù)來構(gòu)建文件路徑,確??梢哉_處理不同操作系統(tǒng)下的路徑分隔符。

使用glob庫進行文件處理

glob庫不僅僅用于匹配和獲取文件列表,還可以方便地進行文件處理。我們可以將glob庫與其他Python庫(例如os、shutil等)結(jié)合使用,來執(zhí)行各種文件操作。

復(fù)制文件

假設(shè)我們想將所有以.txt為后綴的文件復(fù)制到另一個目錄中,我們可以使用shutil庫來實現(xiàn):

import glob
import shutil
source_directory = "data"
destination_directory = "backup"
txt_files = glob.glob(os.path.join(source_directory, "*.txt"))
for txt_file in txt_files:
    shutil.copy(txt_file, destination_directory)

在這個例子中,我們首先使用glob庫來獲取所有以.txt為后綴的文件列表,然后使用shutil.copy()函數(shù)將這些文件復(fù)制到backup目錄中。

刪除文件

如果我們希望刪除所有以.csv為后綴的文件,可以使用os.remove()函數(shù)來實現(xiàn):

import glob
csv_files = glob.glob("data/*.csv")
for csv_file in csv_files:
    os.remove(csv_file)

在這個例子中,我們使用glob庫來獲取所有以.csv為后綴的文件列表,然后使用os.remove()函數(shù)來刪除這些文件。

批量重命名文件

glob庫與字符串處理和os.rename()函數(shù)結(jié)合使用,可以批量重命名文件。假設(shè)我們有一系列文件名格式為file_<num>.txt(例如file_1.txtfile_2.txt等),現(xiàn)在我們希望將它們重命名為data_<num>.txt

import glob
import os
files_to_rename = glob.glob("data/file_*.txt")
for old_file_path in files_to_rename:
    new_file_path = old_file_path.replace("file_", "data_")
    os.rename(old_file_path, new_file_path)

在這個例子中,我們首先使用glob庫獲取所有需要重命名的文件,然后使用字符串的replace()方法將file_替換為data_,最后使用os.rename()函數(shù)進行重命名。

使用glob庫的注意事項

雖然glob庫是一個功能強大的工具,但在使用時還有一些注意事項:

  • 在使用glob庫時,應(yīng)該謹慎處理用戶提供的輸入,以避免路徑遍歷攻擊(Path Traversal Attack)。
  • 使用glob庫時要注意平臺兼容性,特別是在處理路徑分隔符時。建議使用os.path.join()來構(gòu)建文件路徑,以確保在不同操作系統(tǒng)上都能正確運行。
  • 對于大型目錄和大量文件的處理,使用iglob()或者配合生成器(generator)等方法,可以避免不必要的內(nèi)存開銷。

結(jié)語

glob庫提供了一個簡單而強大的方法來管理文件和目錄,讓我們可以輕松地在Python腳本中處理文件。通過掌握glob庫的使用,我們可以更高效地編寫Python程序,并在實際項目中應(yīng)用它們。

以上就是Python利用glob庫實現(xiàn)輕松應(yīng)對文件和目錄管理的詳細內(nèi)容,更多關(guān)于Python glob庫的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python遠程創(chuàng)建docker容器的方法

    Python遠程創(chuàng)建docker容器的方法

    這篇文章主要介紹了Python遠程創(chuàng)建docker容器的方法,如果docker??ps找不到該容器,可以使用?docker?ps?-a查看所有的,然后看剛才創(chuàng)建的容器的STATUS是EXIT0還是EXIT1如果是1,那應(yīng)該是有報錯,使用?docker?logs?容器id命令來查看日志,根據(jù)日志進行解決,需要的朋友可以參考下
    2024-04-04
  • Python?獲取今天任意時刻的時間戳的方法

    Python?獲取今天任意時刻的時間戳的方法

    本文主要介紹了Python?獲取今天任意時刻的時間戳的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧<BR>
    2022-06-06
  • Flask框架學(xué)習(xí)筆記之消息提示與異常處理操作詳解

    Flask框架學(xué)習(xí)筆記之消息提示與異常處理操作詳解

    這篇文章主要介紹了Flask框架學(xué)習(xí)筆記之消息提示與異常處理操作,結(jié)合實例形式分析了flask框架表單登陸消息提示、錯誤模板調(diào)用及異常處理相關(guān)操作技巧,需要的朋友可以參考下
    2019-08-08
  • pytorch深度神經(jīng)網(wǎng)絡(luò)入門準備自己的圖片數(shù)據(jù)

    pytorch深度神經(jīng)網(wǎng)絡(luò)入門準備自己的圖片數(shù)據(jù)

    這篇文章主要為大家介紹了pytorch深度神經(jīng)網(wǎng)絡(luò)入門準備自己的圖片數(shù)據(jù)示例過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 通過實例了解Python異常處理機制底層實現(xiàn)

    通過實例了解Python異常處理機制底層實現(xiàn)

    這篇文章主要介紹了通過實例了解Python異常處理機制底層實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Python正則捕獲操作示例

    Python正則捕獲操作示例

    這篇文章主要介紹了Python正則捕獲操作,結(jié)合具體實例形式分析了Python基于正則表達式的分組、捕獲、替換等相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • Python安裝Numpy和matplotlib的方法(推薦)

    Python安裝Numpy和matplotlib的方法(推薦)

    下面小編就為大家?guī)硪黄狿ython安裝Numpy和matplotlib的方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • python實戰(zhàn)之用emoji表情生成文字

    python實戰(zhàn)之用emoji表情生成文字

    這篇文章主要介紹了python實戰(zhàn)之用emoji表情生成文字,文中有非常詳細的代碼示例,對正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • 使用Flask開發(fā)RESTful?API的方法實現(xiàn)

    使用Flask開發(fā)RESTful?API的方法實現(xiàn)

    RESTful?API是一種基于REST架構(gòu)風(fēng)格設(shè)計的Web服務(wù)接口,本文主要介紹了使用Flask開發(fā)RESTful?API的方法實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • Python程序設(shè)計入門(4)模塊和包

    Python程序設(shè)計入門(4)模塊和包

    Python語言功能非常強大,除了類之外,還有模塊和包的概念,這有點像perl,本文主要介紹了包和模塊,需要的朋友可以參考下
    2014-06-06

最新評論