2271040868 发表于 2023-4-19 15:09:22

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

大佬们,以下是小甲鱼61讲的课后作业,一段关于文件搜索的代码,有很多地方没看懂{:5_100:}

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)

isdkz 发表于 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块中的代码,提示用户找不到相关文件。

2271040868 发表于 2023-4-19 17:40:15

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

那 count 是什么,就是最后函数里那个 count = 0            {:5_99:}
页: [1]
查看完整版本: 小甲鱼的课后作业又看不懂......求热心大佬帮忙