python получить файл расширения: splitext vs endswith

Мне интересно, как лучше использовать эти два, чтобы получить расширение файла, и проверить, принадлежит ли это списку.

name, ext = os.path.splitext(filename) return ext == ".pdf" # an example 

или

 return filename.endswith(".pdf") 

Вот два примера проверки с обоими методами, если имя файла содержит любое из расширений.

 ext = ('.txt', '.py', '.docx', '.pdf') # tuple of extensions. filenames = [ ... ] # list of filename strings ends_matches = [ f for f in filenames if f.endswith(ext) ] # change ext to set for slightly better efficiency. split_matches = [ f for f in filenames if f.splitext()[1] in ext ] # may need to include .lower() for cases with capital extensions. 

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

 return filename.endswith(extension) 

Во-вторых, это более чистое и более короткое решение, которое я бы сказал, если вам нужно только проверить конкретное расширение. Оба работают даже в особых случаях, таких как filename = abc.def.pdf .

Сначала лучше, если вам нужно обработать некоторое имя файла и / или расширение позже.

endswith() обычно используется для проверки имен файлов. Питонический подход для фильтрации определенных расширений файлов в списке имен файлов может быть выполнен следующим образом:

 >>> extensions = ('.pdf', '.txt', '.rtf') >>> [file_name for file_name in files if file_name.lower().endswith(extensions)] # Output -> File names that end with any of those extensions. 

При таком подходе вы можете предоставить множество расширений файлов в кортеже и, возможно, устранить лестницу if/else ( чистый код: D ).