2016-11-09 77 views
1

我有一些文件中保存了日期,例如, foo161108part.txtbaarr161108part2.txtpython141106part2.txt检查文件是否与名称具有相同的日期,Python 3

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

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

有相当多的不同日期不同的文件,我想看看有多少上来就同一日期。

谢谢!

+2

你可以使用一个正则表达式,或者只是遍历一个循环中的字符串并检测第一个数字。然后,获得以下六个数字并比较相同的内容。 –

+0

谢谢@ chris-rands - 我怎么会分裂?由于文件的第一部分对于每个文件而言是不同的长度(例如foo和baarr) – o1n3n21

+0

拆分在此处不适用。字符串上的循环确实是最明显的,并且是最简单的方法。编辑:它当然意味着在日期之前只有字母。否则它会更加困难。 –

回答

1

如果日期部分是搜索的关键部分一个文件名内h时,考虑以下的方法:

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()并保存所得到的

正则表达式对象 重复使用时效率更高时,将在单个程序中使用多个 次

+0

太棒了,谢谢! – o1n3n21

+0

@ o1n3n21,不客气 – RomanPerekhrest

+0

如果日期之后的字符是数字,会有解决办法吗?例如。 foo161108200.txt? – o1n3n21

0

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

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

例子:

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

您可以使用正则表达式和Counter类蟒蛇为此目的:

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) 

输出:

['161108', '161108', '141106'] 
Counter({'161108': 2, '141106': 1}) 
相关问题