2017-03-12 4 views
3

ファイルが混在したフォルダがあり、画像タイプファイルの数だけが必要です。以下は、画像だけでなく、ディレクトリ内のファイル全体を返します。私は何を間違えたのですか?Pythonでディレクトリ内の拡張子(画像)を集める

extensions = ['.jpg','.png','.gif'] 
DL_path = os.getcwd() 
for dirpath, dirnames, files in os.walk(DL_path): 
    for original_file in files: 
     todays_files = sum(1 for x in files if any(needle in original_file for needle in extensions)) 
     print(todays_files) 

1つのjpg、1つのpng、2つのtxtファイルがある場合。 todays_filesは2を返すべきであるが、それはあなたが重複項目を避けるためにsetを使用することができます。4.

答えて

3

を返して:

>>> found_extensions = set() 
>>> found_extensions.add('.png') 
>>> found_extensions.add('.png') # try to add .png again 
>>> found_extensions 
{'.png'} # <-- appear only once 

import os 

extensions = {'.jpg','.png','.gif'} # set literal 

found_extensions = set() 
for dirpath, dirnames, files in os.walk(os.getcwd()): 
    for f in files: 
     found_extensions.add(os.path.splitext(f)[-1]) 
     # ^-- duplicated item is not added 

print(extensions & found_extensions) # to get itersection (&) => filter 
print(len(extensions & found_extensions)) 

UPDATEを数を取得するにはディレクトリごとに一致するファイル数の合計:

import os 

extensions = {'.jpg','.png','.gif'} # set literal 

for dirpath, dirnames, files in os.walk(os.getcwd()): 
    count = sum(os.path.splitext(f)[-1] in extensions for f in files) 
    print(dirpath, count) 

os.path.splitext(f)[-1] in extensionsは、ファイルが希望する拡張子を持つかどうかをチェックし、True(= 1)/ False(= 0)を返します。それらを集約することはあなたに欲しいでしょう。

>>> True == 1 
True 
>>> False == 0 
True 
>>> sum([True, False, False, True, False]) 
2 
+0

私は1枚のjpg、1つのGIF、ディレクトリ内の2のtxtが、それは1枚のjpg、2つのGIFを、そして1つのTXTと2が、次のディレクトリを、返さずに、それはまだ返すことを行うと2、私が必要とするのは、それが3 @ – ScottC

+0

@ScottCを返すことです。私はあなたの質問を誤解しました。私は答えを更新しました。もう一度それをチェックしてください。 – falsetru

0

original_fileを反復処理は、ファイル名の各文字をループしています。空でない文字列がTrueと評価されるので、any関数は常にTrueを返します。それで、あなたはそれぞれのファイルを数えています。私はループの内容を読んでいません。

代わりに、各ファイルの拡張子を取得して、それが気になるファイルタイプのリストに含まれているかどうかを確認できます。

import os 
extensions = ['.jpg','.png','.gif'] 
DL_path = os.getcwd() 
todays_files = [] 
for dirpath, dirnames, files in os.walk(DL_path): 
    for original_file in files: 
     filename, file_extension = os.path.splitext(original_file) 
     if file_extension in extensions: 
      todays_files.append(original_file) 
    print(dirpath, len(todays_files)) 
+0

ありがとうございます。それはうまくいった。 – ScottC

関連する問題