|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大佬们,以下是小甲鱼61讲的课后作业,一段关于文件搜索的代码,有很多地方没看懂
1.主函数是怎么找到
2.get_file_msg把path当参数,参数是什么,Path(path)能得到什么
3.为什么主函数的if和else不是一个层
# 作者:小甲鱼
# 来源:https://fishc.com.cn/thread-213950-1-1.html
# 本代码著作权归作者所有,禁止商业或非商业转载,仅供个人学习使用,违者必究!
# Copyright (c) fishc.com.cn All rights reserved
from pathlib import Path
from time import strftime, localtime
class File:
def __init__(self, name, size, folder, ctime, mtime, atime):
self.name = name
self.size = size
self.folder = folder
self.ctime = ctime
self.mtime = mtime
self.atime = atime
def get_name(self):
return self.name
def get_size(self):
return f"{self.size} 字节"
def get_folder(self):
return f"位置:{self.folder}"
def get_ctime(self):
return f"创建时间:{strftime('%Y-%m-%d %H:%M:%S', localtime(self.ctime))}"
def get_mtime(self):
return f"修改时间:{strftime('%Y-%m-%d %H:%M:%S', localtime(self.mtime))}"
def get_atime(self):
return f"访问时间:{strftime('%Y-%m-%d %H:%M:%S', localtime(self.atime))}"
def get_file_msg(path):
p = Path(path)
paths = []
files = []
# 利用glob()函数找出指定路径下的所有文件
for each in p.glob("**/*"):
paths.append(each)
if each.is_file():
name = each.name
size = each.stat().st_size
folder = each.parent.resolve()
ctime = each.stat().st_ctime
mtime = each.stat().st_mtime
atime = each.stat().st_atime
files.append(File(name, size, folder, ctime, mtime, atime))
print("路径结构如下:")
for each in paths:
print(each)
return files
def match_file(files):
count = 0
filename = input("\n请输入想要搜索的文件名:")
for each in files:
if filename in each.name:
count += 1
print(f"\n找到相关文件({count})-> {each.get_name()}({each.get_size()})")
print(each.get_folder())
print(each.get_ctime())
print(each.get_mtime())
print(each.get_atime())
else:
print("找不到相关文件!")
files = get_file_msg("target")
match_file(files)
这段代码的功能是搜索指定目录下的文件,首先会打印出目录结构,然后根据用户输入的文件名进行模糊搜索并显示文件的详细信息。
- 这段代码没有显式定义主函数,而是在最后两行代码中直接调用了get_file_msg()和match_file()函数。
在此例中,get_file_msg("target")相当于主函数的第一部分,负责获取指定路径下的文件信息;
而match_file(files)则是主函数的第二部分,负责根据用户输入的文件名进行搜索并显示结果。
- 在get_file_msg(path)函数中,path参数表示要搜索的文件夹的路径。Path(path)会创建一个Path对象,
用于表示一个文件系统路径。在这个例子中,p = Path(path)创建了一个表示path的Path对象,用于后续的文件搜索操作。
- 你提到的if和else不在同一层,实际上指的是match_file函数内部的for循环和else语句。在这个例子中,else语句是和for循环配对的,
而不是和if语句配对。这种用法表示当for循环正常执行完毕(没有被break语句终止)时,执行else块中的代码。
在这个例子中,当搜索到的文件都不满足用户输入的文件名条件时,for循环会正常执行完毕,然后执行else块中的代码,提示用户找不到相关文件。
|
|