2017-01-10 6 views
0

ファイル名が同じフォルダに繰り返してあるかどうかをチェックしたいと思います。私の状況を説明するとより良い。pythonでファイル名を確認する

eyeclosed/ 
├── glasses3_face_righteyeclahe_closed.jpg 
├── good1_face_lefteyeclahe_closed.jpg 
├── good1_face_righteyeclahe_closed.jpg 
├── sun3_face_righteyeclahe_closed.jpg 
├── sun4_face_lefteyeclahe_closed.jpg 
├── sun4_face_righteyeclahe_closed.jpg 
├── sun5_face_lefteyeclahe_closed.jpg 

これは画像の両目(左右)に関連している。そして、私は両方の目が2イメージ名はそれらを繰り返す場合は、自己が両目を閉じている、つまり、閉じているかどうかを知りたい(例:のsun4):

import os 
for file in os.listdir("eyeclosed"): 
    if file.endswith(".jpg"): 
    newstr = file.replace("_face_lefteyeclahe_closed", "") 
    newstr = newstr.replace("_face_righteyeclahe_closed", "") 
     print(newstr) 

を私たちに与えている: が簡素化できます

glasses3.jpg 
good1.jpg 
good1.jpg 
sun3.jpg 
sun4.jpg 
sun4.jpg 
sun5.jpg 
sun5.jpg  

これで私の目標は、どの名前が自分自身を繰り返すかを知ることです。もしそうなら、それをtxtファイルに保存してください。例では、それは両眼が閉じていることを意味して自分自身を繰り返し、そう

にtxtファイルに
sun4.jpg both eyes closed 

を保存するのsun4誰かがファイル自体を繰り返しているかどうかを確認する方法を知っていますか?ありがとう

+0

。 'names ['sun4.jpg'] + = 1'の場合、特別な辞書' collections.Counter() 'もあります。または、リストに追加して、 'sun4.jpg 'が名前に含まれているかどうかだけチェックすることができます:do_something()else:names.append(' sun4.jpg ')' – furas

+0

同じ名前のファイルを2つ持つことはできません。 – furas

+0

@furasと私はいけない、あなたが正しく投稿を読む場合は、最初のコードボックスに実際の名前のファイルが表示されます。繰り返しはしませんが、もしそれらを取り除くと、名前が繰り返されている最後のコードボックスが表示されます。もし完全な名前が必要な場合は、ショートネームをペアとして保ちたい場合は、これらの名前をtxt –

答えて

1

どの短い名前が繰り返されるかをチェックする必要があるため、リストを使用して以前の名前を記憶し、このリストに次の名前が存在するかどうかを確認できます。ところで

listdir = [ 
    'glasses3_face_righteyeclahe_closed.jpg', 
    'good1_face_lefteyeclahe_closed.jpg', 
    'good1_face_righteyeclahe_closed.jpg', 
    'sun3_face_righteyeclahe_closed.jpg', 
    'sun4_face_lefteyeclahe_closed.jpg', 
    'sun4_face_righteyeclahe_closed.jpg', 
    'sun5_face_lefteyeclahe_closed.jpg', 
] 

names = [] # list to remember previous names 

for file in listdir: 
    if file.endswith(".jpg"): 
     newstr = file.replace("_face_lefteyeclahe_closed", "") 
     newstr = newstr.replace("_face_righteyeclahe_closed", "") 
     # check if new name is already on list 
     if newstr in names: 
      print(newstr, "both eyes closed") 
     else: 
      # add new name to list first time 
      names.append(newstr) 

あなたは、この名前は、あなたがそれを数えるかcollections.Counter()するために辞書を使用することができます繰り返し、何回必要になります。あなたはすなわちをカウントするために辞書を使用することができます

listdir = [ 
    'glasses3_face_righteyeclahe_closed.jpg', 
    'good1_face_lefteyeclahe_closed.jpg', 
    'good1_face_righteyeclahe_closed.jpg', 
    'sun3_face_righteyeclahe_closed.jpg', 
    'sun4_face_lefteyeclahe_closed.jpg', 
    'sun4_face_righteyeclahe_closed.jpg', 
    'sun5_face_lefteyeclahe_closed.jpg', 
] 

import collections 

names = collections.Counter() 

for file in listdir: 
    if file.endswith(".jpg"): 
     newstr = file.replace("_face_lefteyeclahe_closed", "") 
     newstr = newstr.replace("_face_righteyeclahe_closed", "") 
     names.update([newstr]) 

for name, count in names.items(): 
    if count > 1: 
     print(name, "both eyes closed") 
+0

フォルダーが常に新しいイメージを取得しているので、listdirを更新し続けるために少し変更する必要がありましたが、最初のスクリプトはちょうど私の望むやり方で動作しました。 もう一度ありがとうございました:) –

0
import os 
MyList=[] 
for file in os.listdir("eyeclosed"): 
    if file.endswith(".jpg"): 
    newstr = file.replace("_face_lefteyeclahe_closed", "") 
    newstr = newstr.replace("_face_righteyeclahe_closed", "") 
     print(newstr) 
     MyList.append(newstr) 

#MyList =['glasses3.jpg','good1.jpg','good1.jpg','sun3.jpg','sun4.jpg','vsun4.jpg','sun5.jpg','sun5.jpg'] 
my_dict = {i:MyList.count(i) for i in MyList} 
print my_dict 

出力

{'sun5.jpg': 2, 'sun3.jpg': 1, 'good1.jpg': 2, 'glasses3.jpg': 1, 'sun4.jpg': 1, 'vsun4.jpg': 1} 
+0

私は短くて簡単なものをexaclyしましたか?D ありがとう! –

+0

名前が2回カウントされる場合は、テキストに保存するだけです –

関連する問題