我有这个代码,它使用相同的前两个字母计算目录中的文件.我想修改它,以便它在修改日期之前完成.因此,如果有10个以PR开头的文件和10个以FM开头的文件,2013年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)
我可以打印出修改日期,但不能与计数一起打印.我将不胜感激任何帮助.我原本想使用一个调度程序(有一个很好的例子可以遵循),但是它的用法陷入困境并让它触发.因为我一直在阅读有关正则表达式以及如何在文件名中提取月份的日期,但大多数人都对如何连接它们感到困惑.
最佳答案 一种方法是从文件构建一个字典,按其修改日期键入,并使用与您在代码中执行的相似的Counter对象.为了略微简化,我还使用了计数器的默认值.
所以,给定一个包含这些文件的文件夹&其中的修改日期用于测试:
blue1 05/30/2013 06:37 PM
green1 05/30/2013 06:37 PM
green2 05/30/2013 06:37 PM
purple1 05/30/2013 06:37 PM
purple2 05/30/2013 06:37 PM
purple3 05/30/2013 06:37 PM
purple4 05/30/2013 06:37 PM
purple5 05/30/2013 06:37 PM
red1 05/31/2013 06:38 PM
red2 05/31/2013 06:38 PM
red3 05/31/2013 06:38 PM
red4 05/31/2013 06:38 PM
yellow1 05/31/2013 06:38 PM
yellow2 05/31/2013 06:38 PM
yellow3 05/31/2013 06:38 PM
这段代码:
from collections import defaultdict, Counter
from datetime import date
from operator import itemgetter
import os
COLORS = ('blue', 'green', 'yellow', 'red', 'purple')
NUM_LETTERS = 2
path = 'testdir'
date_counters = defaultdict(Counter)
for filename, filepath in ((name, os.path.join(path, name))
for name in os.listdir(path)):
if (os.path.isfile(filepath) and any(color in filename for color in COLORS)):
mod_date = date.fromtimestamp(os.stat(filepath).st_mtime)
date_counters[mod_date].update((filename[:NUM_LETTERS],))
for mod_date in sorted(date_counters): # sort by file group's modification date
print mod_date.day
for initials, count in sorted(date_counters[mod_date].iteritems(),
key=itemgetter(1)):
print initials, count
产生了这个输出:
30
bl 1
gr 2
pu 5
31
ye 3
re 4