![](/img/trans.png)
[英](Python) - How to count number of files in a file with certain extension or name
[英]Count number of files with certain extension in Python
我是Python的新手,我試圖找出計算特定子目錄中.TIF文件數量的最有效方法。
做了一些搜索,我發現了一個例子(我沒有測試過),它聲稱要計算目錄中的所有文件:
file_count = sum((len(f) for _, _, f in os.walk(myPath)))
這很好,但我只需要計算TIF文件。 我的目錄將包含其他文件類型,但我只想計算TIF。
目前我使用以下代碼:
tifCounter = 0
for root, dirs, files in os.walk(myPath):
for file in files:
if file.endswith('.tif'):
tifCounter += 1
它工作正常,但循環對我來說似乎過多/昂貴。 任何方式更有效地做到這一點?
謝謝。
必須迭代目錄中的所有文件,並查看每個文件名 - 無論是您的代碼還是庫例程。 因此,無論具體解決方案是什么,它們都將具有大致相同的成本。
如果您認為代碼太多,並且如果您實際上不需要遞歸搜索子目錄,則可以使用glob
模塊:
import glob
tifCounter = len(glob.glob1(myPath,"*.tif"))
對於這個特定的用例,如果你不想在子目錄中遞歸搜索,你可以使用os.listdir
:
len([f for f in os.listdir(myPath)
if f.endswith('.tif') and os.path.isfile(os.path.join(myPath, f))])
你的代碼很好。
是的,您將需要循環遍歷這些文件以過濾掉.tif文件,但是與掃描文件目錄以查找這些文件的工作相比,在小內存陣列上循環可以忽略不計,無論如何你必須做。
我不擔心優化此代碼。
如果你確實需要遞歸搜索,或者由於某些其他原因不想使用glob
模塊,你可以使用
file_count = sum(len(f for f in fs if f.lower().endswith('.tif')) for _, _, fs in os.walk(myPath))
這是“Pythonic”方式來調整您為您的目的找到的示例。 但它不會比你一直使用的循環快得多或效率更高; 它只是一個非常緊湊的語法或多或少相同的東西。
嘗試使用fnmatch https://docs.python.org/2/library/fnmatch.html
import fnmatch,os
num_files = len(fnmatch.filter(os.listdir(your_dir),'*.tif'))
print(num_files)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.