2016-11-09 29 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}) 
相關問題