鱼C论坛

 找回密码
 立即注册
查看: 1076|回复: 2

[已解决]小甲鱼的课后作业又看不懂......求热心大佬帮忙

[复制链接]
发表于 2023-4-19 15:09:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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)

最佳答案
2023-4-19 15:19:54
这段代码的功能是搜索指定目录下的文件,首先会打印出目录结构,然后根据用户输入的文件名进行模糊搜索并显示文件的详细信息。

  • 这段代码没有显式定义主函数,而是在最后两行代码中直接调用了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块中的代码,提示用户找不到相关文件。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-19 15:19:54 | 显示全部楼层    本楼为最佳答案   
这段代码的功能是搜索指定目录下的文件,首先会打印出目录结构,然后根据用户输入的文件名进行模糊搜索并显示文件的详细信息。

  • 这段代码没有显式定义主函数,而是在最后两行代码中直接调用了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块中的代码,提示用户找不到相关文件。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2023-4-19 17:40:15 | 显示全部楼层
isdkz 发表于 2023-4-19 15:19
这段代码的功能是搜索指定目录下的文件,首先会打印出目录结构,然后根据用户输入的文件名进行模糊搜索并显 ...

那 count 是什么,就是最后函数里那个 count = 0            
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 15:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表