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