簡體   English   中英

計算Python中具有特定擴展名的文件數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM