0

誰かが私を助けてくれるなら、私はそれが大好きです。私はPythonについてほとんど何も知らないので、素朴なことを許してください。私はこのサイトを2日間読んで、自分がいる場所を超えようとしています。

私はこのコードを書きました(ほとんどの場合、このサイトでよく見ました):

    import os
    path = '/the/path/to/the/I want/to/count'
    file_count = sum((len(f) for _, _,f in os.walk(path)))
    print "Number of files: ",file_count

ファイル数を取得しましたが、時間がかかります。より高速なコードはありますか?そして、ファイル数が予想よりも多かったので、サブディレクトリに入ったと思います。

私の最終的な目標は、各ファイルの最初の2文字に基づいてファイルの数を取得することです。すなわち。AL、AR、AZ。そのために追加しなければならないものの例を入手できるでしょうか?

4

2 に答える 2

4

はい、os.walk()サブディレクトリをトラバースします。

最初の 2 文字でグループ化されたカウントが必要な場合は、そのためにcollections.Counter()クラスを使用します。

import os
from collections import Counter

path = '/the/path/to/the/I want/to/count'
counts = Counter(fname[:2] for _, _, files in os.walk(path) for fname in files)
for initials, count in counts.most_common():
    print '{}: {:>20}'.format(initials, count)

これはサブディレクトリをトラバースし、遭遇した各ファイル名の最初の 2 文字でグループ化されたカウントを収集し、それらのカウントを最も一般的なものから最も一般的でないものへと並べて出力します。

サブディレクトリをトラバースしたくない場合は、os.listdir()代わりに使用します。指定されたディレクトリ内の名前だけを返します (ファイル名とディレクトリ名の両方を含む)。os.path.isfile()次に、ファイル名だけの名前を除外するために使用できます。

counts = Counter(fname[:2] for fname in os.listdir(path) if os.path.isfile(os.path.join(path, fname)))

特定の拡張子を持つファイルを探している場合は、isfile()テストの代わりにその拡張子を探してください。おそらく、同じ拡張子を使用するサブディレクトリはありません。

counts = Counter(fname[:2] for fname in os.listdir(path) if fname.endswith('.pdf'))
于 2013-03-06T20:56:34.030 に答える
1

あなたが試すことができます

len(glob.glob('/the/path/to/the/I want/to/count/AL*'))
len(glob.glob('/the/path/to/the/I want/to/count/AR*'))

于 2013-03-06T21:00:17.873 に答える