摘要:統(tǒng)計(jì)指定文件夾下所有的文件數(shù)量本來(lái)一直是有這個(gè)需求,只是以前寫(xiě)的是遞歸的方式處理,感覺(jué)對(duì)資源的占用不友好,而且的最大遞歸深度不超過(guò),所以改了一下,這里用廣度優(yōu)先遍歷的方式實(shí)現(xiàn)。實(shí)測(cè)兩層共個(gè)文件夾,共的文件數(shù)量。
python 統(tǒng)計(jì)指定文件夾下所有的文件數(shù)量
本來(lái)一直是有這個(gè)需求,只是以前寫(xiě)的是遞歸的方式處理,感覺(jué)對(duì)資源的占用不友好,而且python的最大遞歸深度不超過(guò)1000,所以改了一下,這里用廣度優(yōu)先遍歷的方式實(shí)現(xiàn)。
實(shí)測(cè)兩層共24個(gè)文件夾,共50w的文件數(shù)量。運(yùn)行時(shí)間大概3秒。以下是代碼:
import os import queue def get_file_quantity(folder: str) -> int: """BFS獲取文件夾下文件的總數(shù)量""" # 判斷初始文件夾 assert os.path.isdir(folder), "請(qǐng)輸入有效的文件夾參數(shù)" file_quantity = 0 # 初始化文件數(shù)量 folder_path_queue = queue.Queue() folder_path_queue.put_nowait(folder) # 初始化隊(duì)列的值 # 處理隊(duì)列里的文件夾 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"文件總數(shù)是: {file_quantity}")思路
這里主要是使用了隊(duì)列,就是普通的BFS的思路
這里稍微改一下folder_list = list(filter(lambda bar: os.path.isdir(bar), file_folder_list))里的的lambda函數(shù)就可以實(shí)現(xiàn)判斷對(duì)文件名的各種判斷操作,這里函數(shù)功能的實(shí)現(xiàn)就完全取決于自己的腦洞了!
附上一個(gè)改編版: 查看包含特定后綴的文件的數(shù)量
改編版: 查看包含特定后綴的文件的數(shù)量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獲取文件夾下文件的總數(shù)量""" # 判斷初始文件夾 assert os.path.isdir(folder), "請(qǐng)輸入有效的文件夾參數(shù)" assert isinstance(extension, str), "請(qǐng)輸入有效的文件后綴名" file_quantity = 0 # 初始化文件數(shù)量 folder_path_queue = queue.Queue() folder_path_queue.put_nowait(folder) # 初始化隊(duì)列的值 # 處理隊(duì)列里的文件夾 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 } 的文件的數(shù)量: {file_quantity}")
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/43744.html
摘要:如果語(yǔ)句中使用了子查詢(xún)集合操作臨時(shí)表等情況,會(huì)給列帶來(lái)很大的復(fù)雜性。會(huì)遞歸執(zhí)行這些子查詢(xún),把結(jié)果放在臨時(shí)表里。查詢(xún)優(yōu)化器從中所選擇使用的索引。該字段顯示了查詢(xún)優(yōu)化器通過(guò)系統(tǒng)收集的統(tǒng)計(jì)信息估算出來(lái)的結(jié)果集記錄條數(shù)。 引言 優(yōu)化SQL,是DBA常見(jiàn)的工作之一。如何高效、快速地優(yōu)化一條語(yǔ)句,是每個(gè)DBA經(jīng)常要面對(duì)的一個(gè)問(wèn)題。在日常的優(yōu)化工作中,我發(fā)現(xiàn)有很多操作是在優(yōu)化過(guò)程中必不可少的步驟。然...
摘要:我們現(xiàn)在來(lái)看二分搜索算法的兩種變形插值搜索和指數(shù)搜索。插值搜索是對(duì)二分搜索算法的改進(jìn),插值搜索可以基于搜索的值選擇到達(dá)不同的位置。 預(yù)警 在本篇文章中,將為各位老鐵介紹不同的搜索算法以及它們的復(fù)雜度。因?yàn)榱η笸ㄋ滓锥云赡茌^長(zhǎng),大伙可以先Mark下來(lái),每天抽時(shí)間看一點(diǎn)理解一點(diǎn)。本文配套的Github Repo,歡迎各位老鐵star,會(huì)一直更新的。 開(kāi)篇 和排序類(lèi)似,搜索或者叫做...
這篇文章主要為大家介紹了Python腳本提取fasta文件單序列信息實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪 此篇文章關(guān)鍵給大家介紹了Python腳本制作獲得fasta文件單編碼序列信息內(nèi)容完成實(shí)例,感興趣的小伙伴可以參考借鑒一下,希望可以有一定的幫助,祝愿大家多多的發(fā)展,盡早漲薪 Python腳本制作編寫(xiě) 應(yīng)用Python對(duì)fasta格式編碼...
閱讀 1277·2021-09-27 13:35
閱讀 2576·2021-09-06 15:12
閱讀 3394·2019-08-30 15:55
閱讀 2847·2019-08-30 15:43
閱讀 444·2019-08-29 16:42
閱讀 3455·2019-08-29 15:39
閱讀 3074·2019-08-29 12:28
閱讀 1253·2019-08-29 11:11