4

最初の 2 文字が同じディレクトリ内のファイルをカウントするこのコードがあります。修正日までに行うように修正したい。したがって、で始まる 10 個のファイルと で始まる 10 個のファイルがある場合PRFM2013 年 5 月 17 日にそれぞれ 5 個、2013 年 5 月 18 日にそれぞれ 5 個、出力は次のようになります。

17
FM 5
PR 5
18
FM 5
PR 5
import os
from collections import Counter

path = '/My/path/to/the/directory/test'

counts = Counter(fname[:2] for fname in os.listdir(path) if
                      os.path.isfile(os.path.join(path, fname)) 
                  and 'blue' in fname 
                  or 'green' in fname 
                  or 'yellow' in fname 
                  or 'red' in fname 
                  or 'purple' in fname)

for initials, count in counts.most_common():
    print '{}: {:>20}'.format(initials,count)

変更された日付を印刷できますが、カウントとは併用できません。助けていただければ幸いです。私はもともとスケジューラーを使用したかったのですが (従うべき良い例があります)、その使用法とそれをトリガーすることに行き詰まりました。私は正規表現とファイル名から月の日を抽出する方法について読んできたので、それがどのように接続されるかについてほとんど混乱していました。

4

2 に答える 2

1

groupby を使用してファイルを整理できます。

まず、ファイルをその mtime にマップする関数が必要です。次に、その値でソートされたファイルのリストを取得します。

from collections import Counter
from itertools import groupby
import os
import datetime

def find_mod_date(basedir):
    return lambda filename: datetime.date.fromtimestamp(
                            os.stat(os.path.join(basedir, filename)).st_mtime)

path="/tmp"
mod_dates_in_path = find_mod_date(path)

files = [fname for fname in os.listdir(path) 
         if os.path.isfile(os.path.join(path, fname))
             and any(name in fname for name in ['red', 'blue'])]
files = sorted(files, key=mod_dates_in_path)

次に、ファイルを mtime でグループ化します。

grouping_by_date = groupby(files, key=mod_dates_in_path)

結果を反復処理し、名前のプレフィックスでカウントします。

results = {}
for day, group in grouping_by_date:
    results[day] = Counter(name[:2] for name in group)

for day, prefix_counts in results.iteritems():
    print day
    for prefix, count in prefix_counts.iteritems():
        print "{}: {}".format(prefix, count)
于 2013-05-31T22:44:29.480 に答える