2017-01-24 4 views
2

ファイル拡張子を取得し、それがリストに属しているかどうかを確認するには、この2つの方法の方がいいですか?python get extension file:splitext vs endswith

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

または

return filename.endswith(".pdf") 
+6

可能な重複(http://stackoverflow.com/questions/541390/extracting-extension-from-filename-in-python)だけ被写体 – vabada

+1

@vabada。実際の問題は、拡張機能を取得することではなく、指定された拡張機能の値と比較/確認することです。 – BlackJack

答えて

1

2つ目は、あなたが唯一の特定の拡張子をチェックする必要がある場合は、私が言うクリーナーと短いソリューションです。両方とも、ファイル名= abc.def.pdfのような特殊なケースでも機能します。

ファイル名や拡張子を後で何らかの方法で処理する必要がある場合は、最初の方が良いでしょう。

1

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)。

3

ファイル名に拡張子のいずれかが含まれている場合、両方の方法でチェックする2つの例を以下に示します。

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. 

この場合、使用するのは本当にあなた次第です。 1つのファイル拡張子をチェックしたいだけなら、後者の場合はendswithとお勧めします。 [Pythonでファイル名から拡張子を抽出]の

return filename.endswith(extension)