用python检查文件名

2024-04-19 16:30:50 发布

您现在位置: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

这是指图像上的双眼(左右)。我想知道两个眼睛是否都闭着,也就是说,如果两个图像名称重复它们本身,两个眼睛都闭着(例如: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文件。例如,sun4重复它自己,这意味着两只眼睛都闭上了,所以保存到一个txt文件

sun4.jpg both eyes closed 

有人知道如何检查文件是否重复?谢谢你


Tags: 文件filefacejpg眼睛closedglasses3newstr
3条回答
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}

因为您只需要检查哪个(短)名称重复,所以可以使用list来记住以前的名称,并检查此列表中是否存在下一个名称。

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)

顺便说一句:如果您需要这个名称重复多少次,那么您可以使用dictionary来计算它或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")

可以使用split方法检查文件名是否重复:

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

你可以在方便的时候使用分割法。我不认为真的需要替换元素然后附加它们。脚本将打印出重复目录的名称。使用以下命令将输出保存到文件:

python scriptName.py > /tmp/fileCheck.txt

相关问题 更多 >