Quiero verificar si un nombre de archivo se repite en la misma carpeta. Mejor si ilustra mi situación

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

Esto es referente a ambos ojos (izquierdo y derecho) en una imagen. Y quiero saber si ambos ojos están cerrados, eso significa que si 2 nombres de imágenes se repiten, ambos ojos están cerrados (ejemplo: sun4). Simplifiquemos:

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)

Que nos dan:

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

Ok, ahora mi objetivo es saber qué nombres se repiten y, de ser así, guardarlo en un archivo txt. Ejemplo, sun4 se repite, lo que significa que ambos ojos están cerrados, así que guárdelos en un archivo txt

sun4.jpg both eyes closed 

¿Alguien sabe cómo verificar si el archivo se repite? Gracias

0
Tiago Silva 10 ene. 2017 a las 20:42

3 respuestas

La mejor respuesta

Debido a que solo debe verificar qué nombre (corto) se repite, puede usar la lista para recordar nombres anteriores y verificar si existe el siguiente nombre en esta lista.

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)

Por cierto: si necesita cuántas veces se repite este nombre, puede usar el diccionario para contarlo o 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")
1
furas 10 ene. 2017 a las 18:22

Puede usar el método de división y verificar si un nombre de archivo se repite:

import os
present_files = [] # This will contain the unique file names
for filename in os.listdir("eyeclosed"):
    if filename.endswith(".jpg")
        lookname = filename.split('_')[0] #This is the part of the name you are looking for to repeat itself
        if lookname in present_files:
            print(lookname)
        else:
            present_files.append(lookname+".jpg") #".jpg" is optional

Puede usar el método dividido a su conveniencia. No creo que haya realmente ninguna necesidad de reemplazar los elementos y luego agregarlos. El script imprimirá los nombres de los directorios que se repiten. Use el siguiente comando para guardar la salida en el archivo:

python scriptName.py > /tmp/fileCheck.txt
0
Amar chand Dargad 18 abr. 2019 a las 08:41
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

Salida

  {'sun5.jpg': 2, 'sun3.jpg': 1, 'good1.jpg': 2, 'glasses3.jpg': 1, 'sun4.jpg': 1,  'vsun4.jpg': 1}
1
Shijo 10 ene. 2017 a las 18:13