鱼C论坛

 找回密码
 立即注册
查看: 69|回复: 3

[已解决]代码求助

[复制链接]
发表于 2025-2-13 16:39:46 | 显示全部楼层 |阅读模式

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

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

x
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


请问这里的'each.name’为什么没有报错,each并未实例化为类对象
最佳答案
2025-2-13 16:39:57
路径对象 `each` 是一个 `Path` 对象,来自 `pathlib.Path` 类。当你调用 `each.name` 时,实际上是调用了 `Path` 类的 `name` 属性。这个属性返回路径的最后一个组件,即文件名或目录名。因此没有报错。

顺便帮你把代码中遗漏的部分补充完整:
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 = []  # Initialize paths as a list
    files = []  # Initialize files as a list
    
    # 利用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

请注意,我已补充了 `paths` 和 `files` 列表的初始化。在最后打印了路径结构,并返回 `files` 列表。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2025-2-13 16:39:57 | 显示全部楼层    本楼为最佳答案   
路径对象 `each` 是一个 `Path` 对象,来自 `pathlib.Path` 类。当你调用 `each.name` 时,实际上是调用了 `Path` 类的 `name` 属性。这个属性返回路径的最后一个组件,即文件名或目录名。因此没有报错。

顺便帮你把代码中遗漏的部分补充完整:
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 = []  # Initialize paths as a list
    files = []  # Initialize files as a list
    
    # 利用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

请注意,我已补充了 `paths` 和 `files` 列表的初始化。在最后打印了路径结构,并返回 `files` 列表。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-2-13 17:02:58 | 显示全部楼层
FishC 发表于 2025-2-13 16:39
路径对象 `each` 是一个 `Path` 对象,来自 `pathlib.Path` 类。当你调用 `each.name` 时,实际上是调用了  ...

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)
    files = []
   
    # 利用glob()函数找出指定路径下的所有文件
    for each in p.glob("**/*"):

        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))


    return files
这里为什么没有报错,'files.append(File(name, size, folder, ctime, mtime, atime))' ,类File不用进行实例化吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-2-13 17:03:14 | 显示全部楼层
andreahhhhhh 发表于 2025-02-13 17:02
FishC 发表于 2025-2-13 16:39
路径对象 `each` 是一 ...


在你的代码中,`File(name, size, folder, ctime, mtime, atime)` 这行代码实际上就是在实例化 `File` 类。调用类的构造函数并传递参数会创建一个新的 `File` 对象,然后将这个对象添加到 `files` 列表中。

然而,你的代码会报错,因为你没有初始化 `files` 列表。修改如下:
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)
    files = []  # Initialize files as a list
    
    # 利用glob()函数找出指定路径下的所有文件
    for each in p.glob("**/*"):

        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))

    return files

这样,`files` 列表就被正确地初始化,并可以存放 `File` 对象。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-23 20:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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