2016-11-09 8 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

正規表現を使用することも、ループ内の文字列を調べて最初の番号を検出することもできます。次に、以下の6つの数字を取得して、同じものを比較してください。 –

+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) 

出力:

re.compile()を用いて、得られた保存:正規表現として

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

正規表現オブジェクト は、式を複数使用するとより効率的です 回1つのプログラムで

+0

素晴らしいです、ありがとうございます! – o1n3n21

+0

@ o1n3n21、あなたは大丈夫です – RomanPerekhrest

+0

日付の後の文字が数字の場合は対処法がありますか?例えば。 foo161108200.txt? – o1n3n21

0

ファイルの内容を比較するだけの目的がある場合は、filecmpモジュールを使用するのが理想的です。

は、それらが等しい、そうでなければFalse思われる場合はtrueを返します、F1という名前のファイルとf2の比較:このモジュールは filecmp.cmp()方法を提供します。

例:

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

あなたは、この目的のためのpythonの正規表現とカウンタークラスを使用することができます。

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}) 
関連する問題