Это используется для проверки совместимости версии 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
}
Что-то должно перебирать все файлы в каталоге и проверять каждое имя файла - будь то ваш код или библиотечная процедура. Итак, независимо от того, какое конкретное решение, все они будут иметь примерно одинаковую стоимость.
Если вы считаете, что это слишком много кода и вам действительно не нужно рекурсивно искать подкаталоги, вы можете использовать glob
модуль:
import glob
tifCounter = len(glob.glob1(myPath,"*.tif"))
Ваш код в порядке.
Да, вам нужно будет перебрать эти файлы, чтобы отфильтровать файлы .tif, но перебор небольшого массива в памяти незначителен по сравнению с работой по сканированию каталога файлов для поиска этих файлов в первое место, которое вы все равно должны сделать.
Я бы не стал беспокоиться об оптимизации этого кода.
Если вам действительно нужен рекурсивный поиск или по какой-либо другой причине вы не хотите использовать модуль glob
, вы можете использовать
file_count = sum(len(f for f in fs if f.lower().endswith('.tif')) for _, _, fs in os.walk(myPath))
Это "Pythonic «способ адаптировать найденный вами пример для своих целей. Но это не будет значительно быстрее или эффективнее, чем цикл, который вы использовали; это просто действительно компактный синтаксис для более или менее того же самого.
В этом конкретном случае, если вы не хотите рекурсивно искать в подкаталоге, вы можете использовать os.listdir
:
len([f for f in os.listdir(myPath)
if f.endswith('.tif') and os.path.isfile(os.path.join(myPath, f))])