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

Search in directory and subdirectories for missing files

我正在尝试搜索一个目录和关联的子目录,以查看这些列出的 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')

您可以利用 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')

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

使用以下文件夹:

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

它returns :

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

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

我所做的是使用 os os.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。