2017-03-13 1 views
0

私は、ディレクトリ内のすべてのファイルをトラバースしてそのファイルタイプを識別するのに役立つスクリプトを作成しようとしています。最後に、結果は、識別された各ファイルタイプの合計数を出力するはずです。私はmagicライブラリを使用して、MIMEに基づいてファイルの種類を識別しています。識別片が貼り付けられファイルタイプと各タイプの数を特定するために各ディレクトリを移動しますか?

for filename in os.listdir(os.getcwd()): 
    print filename 
    with magic.Magic(flags=magic.MAGIC_MIME_TYPE) as m: 
     t = m.id_filename(filename) 
     print t 

はそれを超えると正常に動作しているようだが、私は特定されたファイルタイプとその数を保存する方法がわからないです。出力は次のようになります。 ... ...

filetype1数 filetype2カウントはそれを行うための理想的な方法はどうあるべきかのように私を案内してください。

+0

リスト 'new_list'に投げ、すべてのファイル名を、とは'にCounter'をインポート'Counter(new_list)' – ryugie

+0

とファイル名で私はファイルの種類を意味していました:P – ryugie

答えて

1

各ファイルタイプとそのカウントのマッピングを含む辞書を作成できます。例えば

file_types = {'filetype1' : 10, 'filetype2': 20, ...} 

現在のソリューションは、現在のディレクトリでのみ動作し、サブディレクトリでは動作しません。

file_types = {} 

for filename in os.listdir(os.getcwd()): 
    with magic.Magic(flags=magic.MAGIC_MIME_TYPE) as m: 
     t = m.id_filename(filename) 
     file_types.setdefault(t, 0) 
     file_types[t] += 1 
... 

追加してカウントする必要があります。

1

collectionsモジュールのCounterクラスを使用できます。これは基本的に辞書の変形です。追加のメソッドがいくつかあり、カウントするときに0で初期化する必要はありません。

私はあなたがそうここ代用としてmy_magicを使用した例ですが、言及magicことがありません:コレクションから

import collections 
import os 

def my_magic(filename): 
    """ 
    This function is just a placeholder to be used in place of your id_filename() 
    method. 
    """ 
    if filename.endswith(".txt"): 
     return "TXT" 
    elif filename.endswith(".pdf"): 
     return "PDF" 
    else: 
     return "other" 

# initialize the counter object: 
counter = collections.Counter() 

for filename in os.listdir(os.getcwd()): 
    print filename 

    # substitute the next line with whatever you use to determine the 
    # type of the file: 
    t = my_magic(filename) 
    print t 

    # increase the count for the current value of 't': 
    counter[t] += 1 

# output what is in counter: 
for ext, n in counter.items(): 
    print ext, n 
関連する問題