在目录和子目录中搜索丢失的文件

2024-06-02 09:12:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图搜索一个目录和相关的子目录,看看这些列出的jpg文件是否丢失。我让它在一个目录中循环,但无法将搜索扩展到任何子目录

我尝试过使用os.walk,但它只是在所有文件中循环,并重复所有文件丢失,即使它们没有丢失。因此,我不知道如何进行

这是我到目前为止掌握的代码

source = 'path_to_file'
paths = ['Hello', 'Hi', 'Howdy']
for index, item in enumerate(paths):
      paths[index] = (source + '\\' + paths[index]+'.jpg')

mp = [path for path in paths if not isfile(path)]
for nl in mp:
      print(f'{nl}... is missing')

2条回答

正如您所说,使用os.walk无法获得所需的输出,这里有一个解决方案

我使用osos.walk搜索了整个目录,然后将文件名附加到名为emty_list的列表中。然后我尝试检查列表file_name中的项目是否在emty_list

import os
source = r'path'
emty_list=[]
file_name= ['hello.jpg', 'Hi.jpg', 'Howdy.jpg']
for root, dirs, files in os.walk(f"{source}", topdown=False): #Listing Directory
    for name in files:
        emty_list.append(name)
for check in file_name:
    if check not in emty_list:
        print(f"File Not Found Error : File Name: {check}")

注意:请检查您在系统中创建的文件是否为例如Hello.jpg而不是Hello.jpg。

您可以利用glob和递归参数在python中实现这一点:

import glob

source='./'
paths=['file1','file2','file3']
for path in paths:
        print(f"looking for {path} with {source+'**/'+path+'.jpg'}")
        print(glob.glob(source+"**/"+path+".jpg",recursive=True))
mp=[path for path in paths if not glob.glob(source+"**/"+path+".jpg",recursive=True)]
for nl in mp:
      print(f'{nl}... is missing')

(您可以删除for loop行5-7,这只是为了澄清glob是如何工作的,理解列表本身就足够了)

使用以下文件夹:

.
├── file1.jpg
├── search.py
└── subfolder
    └── file3.jpg

它返回:

looking for file1 with ./**/file1.jpg
['./file1.jpg']
looking for file2 with ./**/file2.jpg
[]
looking for file3 with ./**/file3.jpg
['./subfolder/file3.jpg']
file2... is missing

相关问题 更多 >