摘要:統計指定文件夾下所有的文件數量本來一直是有這個需求,只是以前寫的是遞歸的方式處理,感覺對資源的占用不友好,而且的最大遞歸深度不超過,所以改了一下,這里用廣度優先遍歷的方式實現。實測兩層共個文件夾,共的文件數量。
python 統計指定文件夾下所有的文件數量
本來一直是有這個需求,只是以前寫的是遞歸的方式處理,感覺對資源的占用不友好,而且python的最大遞歸深度不超過1000,所以改了一下,這里用廣度優先遍歷的方式實現。
實測兩層共24個文件夾,共50w的文件數量。運行時間大概3秒。以下是代碼:
import os import queue def get_file_quantity(folder: str) -> int: """BFS獲取文件夾下文件的總數量""" # 判斷初始文件夾 assert os.path.isdir(folder), "請輸入有效的文件夾參數" file_quantity = 0 # 初始化文件數量 folder_path_queue = queue.Queue() folder_path_queue.put_nowait(folder) # 初始化隊列的值 # 處理隊列里的文件夾 while not folder_path_queue.empty(): folder = folder_path_queue.get_nowait() file_folder_list = list(map(lambda bar: os.path.join(folder, bar), os.listdir(folder))) folder_list = list(filter(lambda bar: os.path.isdir(bar), file_folder_list)) for folder_path in folder_list: folder_path_queue.put_nowait(folder_path) temp_file_count = len(file_folder_list) - len(folder_list) file_quantity += temp_file_count return file_quantity if __name__ == "__main__": file_quantity = get_file_quantity(r"/home") print(f"文件總數是: {file_quantity}")思路
這里主要是使用了隊列,就是普通的BFS的思路
這里稍微改一下folder_list = list(filter(lambda bar: os.path.isdir(bar), file_folder_list))里的的lambda函數就可以實現判斷對文件名的各種判斷操作,這里函數功能的實現就完全取決于自己的腦洞了!
附上一個改編版: 查看包含特定后綴的文件的數量
改編版: 查看包含特定后綴的文件的數量import os import queue def filter_extension(filename: str, extension: str) -> bool: """判斷文件路徑名的后綴是否和給定的后綴字符串相同 只是單純的字符串判斷 """ basename_and_extension = filename.split(".") return (basename_and_extension[-1] == extension) and (len(basename_and_extension) >= 2) def get_file_quantity(folder: str, extension: str) -> int: """BFS獲取文件夾下文件的總數量""" # 判斷初始文件夾 assert os.path.isdir(folder), "請輸入有效的文件夾參數" assert isinstance(extension, str), "請輸入有效的文件后綴名" file_quantity = 0 # 初始化文件數量 folder_path_queue = queue.Queue() folder_path_queue.put_nowait(folder) # 初始化隊列的值 # 處理隊列里的文件夾 while not folder_path_queue.empty(): folder = folder_path_queue.get_nowait() file_folder_list = list(map(lambda bar: os.path.join(folder, bar), os.listdir(folder))) folder_list = list(filter(lambda bar: os.path.isdir(bar), file_folder_list)) file_list = list(filter(lambda bar: os.path.isfile(bar), file_folder_list)) match_extension_list = list(filter(lambda bar: filter_extension(bar, extension), file_list)) for folder_path in folder_list: folder_path_queue.put_nowait(folder_path) temp_file_count = len(match_extension_list) file_quantity += temp_file_count return file_quantity if __name__ == "__main__": extension = "py" file_quantity = get_file_quantity(r"/home", extension) print(f"包含后綴 {extension } 的文件的數量: {file_quantity}")
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/43744.html
摘要:如果語句中使用了子查詢集合操作臨時表等情況,會給列帶來很大的復雜性。會遞歸執行這些子查詢,把結果放在臨時表里。查詢優化器從中所選擇使用的索引。該字段顯示了查詢優化器通過系統收集的統計信息估算出來的結果集記錄條數。 引言 優化SQL,是DBA常見的工作之一。如何高效、快速地優化一條語句,是每個DBA經常要面對的一個問題。在日常的優化工作中,我發現有很多操作是在優化過程中必不可少的步驟。然...
摘要:我們現在來看二分搜索算法的兩種變形插值搜索和指數搜索。插值搜索是對二分搜索算法的改進,插值搜索可以基于搜索的值選擇到達不同的位置。 預警 在本篇文章中,將為各位老鐵介紹不同的搜索算法以及它們的復雜度。因為力求通俗易懂,所以篇幅可能較長,大伙可以先Mark下來,每天抽時間看一點理解一點。本文配套的Github Repo,歡迎各位老鐵star,會一直更新的。 開篇 和排序類似,搜索或者叫做...
這篇文章主要為大家介紹了Python腳本提取fasta文件單序列信息實現示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪 此篇文章關鍵給大家介紹了Python腳本制作獲得fasta文件單編碼序列信息內容完成實例,感興趣的小伙伴可以參考借鑒一下,希望可以有一定的幫助,祝愿大家多多的發展,盡早漲薪 Python腳本制作編寫 應用Python對fasta格式編碼...
閱讀 1265·2021-09-27 13:35
閱讀 2563·2021-09-06 15:12
閱讀 3380·2019-08-30 15:55
閱讀 2829·2019-08-30 15:43
閱讀 432·2019-08-29 16:42
閱讀 3446·2019-08-29 15:39
閱讀 3062·2019-08-29 12:28
閱讀 1239·2019-08-29 11:11