Подсчитать количество файлов с определенным расширением в Python

Это используется для проверки совместимости версии SDK в Xcode, это если у вас большая команда с разными версиями Xcode или нескольких проектов, поддерживающих разные SDK, которые используют один и тот же код:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
  //programming in iOS 8+ SDK here
#else
  //programming in lower than iOS 8 here   
#endif

Вы действительно хотите проверить версию iOS на устройстве. Вы можете сделать это с помощью этого:

if ([[[UIDevice currentDevice] systemVersion] floatValue] < 8.0) {
  //older than iOS 8 code here
} else {
  //iOS 8 specific code here
}

Swift version:

if let version = Float(UIDevice.current.systemVersion), version < 9.3 {
    //add lower than 9.3 code here
} else {
    //add 9.3 and above code here
}
30
задан S.Lott 24 August 2009 в 10:31
поделиться

4 ответа

Что-то должно перебирать все файлы в каталоге и проверять каждое имя файла - будь то ваш код или библиотечная процедура. Итак, независимо от того, какое конкретное решение, все они будут иметь примерно одинаковую стоимость.

Если вы считаете, что это слишком много кода и вам действительно не нужно рекурсивно искать подкаталоги, вы можете использовать glob модуль:

import glob
tifCounter = len(glob.glob1(myPath,"*.tif"))
50
ответ дан 27 November 2019 в 16:40
поделиться

Ваш код в порядке.

Да, вам нужно будет перебрать эти файлы, чтобы отфильтровать файлы .tif, но перебор небольшого массива в памяти незначителен по сравнению с работой по сканированию каталога файлов для поиска этих файлов в первое место, которое вы все равно должны сделать.

Я бы не стал беспокоиться об оптимизации этого кода.

5
ответ дан 27 November 2019 в 16:40
поделиться

Если вам действительно нужен рекурсивный поиск или по какой-либо другой причине вы не хотите использовать модуль glob , вы можете использовать

file_count = sum(len(f for f in fs if f.lower().endswith('.tif')) for _, _, fs in os.walk(myPath))

Это "Pythonic «способ адаптировать найденный вами пример для своих целей. Но это не будет значительно быстрее или эффективнее, чем цикл, который вы использовали; это просто действительно компактный синтаксис для более или менее того же самого.

3
ответ дан 27 November 2019 в 16:40
поделиться

В этом конкретном случае, если вы не хотите рекурсивно искать в подкаталоге, вы можете использовать os.listdir :

len([f for f in os.listdir(myPath) 
     if f.endswith('.tif') and os.path.isfile(os.path.join(myPath, f))])
7
ответ дан 27 November 2019 в 16:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: