检查文件是否与名称Python 3具有相同的日期

时间:2016-11-09 21:16:02

标签: python

我有一些文件中保存了日期,例如foo161108part.txtbaarr161108part2.txtpython141106part2.txt

到目前为止,我已经列出了目录:

directoryFiles = []
for name in os.listdir(os.getcwd()):
    if name.endswith('.txt'):
        files.append(name)
print(files)

有很多不同的日期不同的文件,我想看看有多少文件出现在同一个日期。

谢谢!

3 个答案:

答案 0 :(得分:1)

如果 date 部分是在文件名中搜索的关键部分,请考虑以下方法:

import re

counts = {}
pattern = re.compile(r'^.*(\d{6}).*?$')

for f in os.listdir('text_files'):
    m = re.match(pattern, f)
    if m:
        date_value = m.group(1)
        counts[date_value] = counts[date_value]+1 if counts.get(date_value) else 1

print(counts)

输出:

{'161108': 2, '141106': 1}

至于正则表达式:

  

使用 re.compile()并保存生成的正则表达式对象   当表达式将被多次使用时,重用更有效   单个计划中的时间

答案 1 :(得分:0)

如果目的只是比较文件的内容,理想的方法是使用filecmp模块。这个模块提供了filecmp.cmp()方法:

  

比较名为f1和f2的文件,如果它们看起来相等则返回True,否则返回False。

示例:

>>> import filecmp
>>> filecmp.cmp('undoc.rst', 'undoc.rst') 
True
>>> filecmp.cmp('undoc.rst', 'index.rst') 
False

答案 2 :(得分:0)

您可以使用python的正则表达式和Counter类来实现此目的:

select * from mytable
where substr(my_date, 1, 4) in (
  select to_char(to_number(to_char(sysdate, 'YYYY')) - (level-1)) yr
  from dual
  connect by level <= 3);

输出:

import re
from collections import Counter

files = ['foo161108part.txt','baarr161108part2.txt','python141106part2.txt']

dates = []
for f in files:
    m = re.match(r"^.*(\d{6}).*\.txt$", f)
    if m:
        dates.append(m.group(1))
print dates
print Counter(dates)