题目
编写程序,用户输入一个文件夹名和一个文件名,搜索该文件夹及其所有子文件夹 中是否存在该文件,如果存在就输出“是”,如果不存在就输出“否”。
题解
- 使用
os
的listdir()
可以返回指定目录下的文件名称和文件夹名称。 listdir()
返回列表,可以通过__contains__()
查找文件名称是否在该目录下。- 通过
filter
过滤过滤文件,保留文件夹名称,在通过map
使其带上路径,通过os.path.isdir()
判断该文件夹名称是否是文件夹(可能存在文件没有后缀名),如果是,则再次查找,直至在该文件夹及其所有子文件夹中找到为止。 - 文件夹有时可能拒绝访问,所以使用try语句避免报错。
代码
import os
#查找当前文件夹
def search_currentfolder(folder, filename):
try:
files = os.listdir(folder)
except:
print(folder,": folder accessDenied")
return None
if files.__contains__(filename):
return os.path.join(folder, filename)
else:
return None
#查找全当前文件夹及其子文件夹
def search_allfolder(folder, filename):
filepath = search_currentfolder(folder,filename)
if filepath:
return filepath
else:
try:
files = os.listdir(folder)
except:
return None
folders = list(map(lambda name:folder+"\\"+name, filter(lambda path: not path.__contains__("."), files)))
if not folders:
return None
for folderpath in folders:
if os.path.isdir(folderpath):
filepath = search_allfolder(folderpath, filename)
if filepath:
return filepath
return None
#通过search调用上面两个函数
def search(folder,filename,model="current"):
if model=="all":
filepath = search_allfolder(folder,filename)
else:
filepath = search_currentfolder(folder, filename)
if filepath:
print("是")
print(filepath)
else:
print("否")
folder = input("folder path:")
filename = input("file path:")
search(folder,filename,model = "all")