You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python获取归档文件修改时间并自动备份?代码报错排查

问题解决:归档文件变更自动备份的代码错误修复

核心错误原因

你遇到的NameError确实是因为没有声明类的实例对象。你定义了edit类,但从未创建该类的实例,直接尝试访问last_edit.change自然会报错。此外代码还有其他语法和逻辑错误,下面逐一修正。

修正后的完整代码

import os
import shutil
import time

class Edit:
    def __init__(self):
        self.change = []  # 存储文件修改时间
        self.creation = []  # 存储文件创建时间

# 修正路径拼写错误,统一变量名
file_source = 'C:/Users/Automation/Desktop/NEW2/'
file_destination = 'C:/Users/Automation/Desktop/NEW/'

# 创建类的实例对象
last_edit = Edit()

# 获取文件夹内所有文件
get_files = os.listdir(file_source)

# 遍历文件并记录修改时间
for filename in get_files:
    # 拼接完整文件路径,避免索引运算错误
    file_full_path = os.path.join(file_source, filename)
    # 获取并存储文件修改时间(关联文件名)
    modify_time = time.ctime(os.path.getmtime(file_full_path))
    last_edit.change.append((filename, modify_time))

# 打印所有文件的修改时间
print("文件修改时间列表:")
for file_info in last_edit.change:
    print(f"{file_info[0]}: {file_info[1]}")

# 执行备份(后续可扩展为仅备份变更文件)
for filename in get_files:
    source_path = os.path.join(file_source, filename)
    dest_path = os.path.join(file_destination, filename)
    shutil.copy(source_path, dest_path)
print("备份完成")

关键修正点

  • 类的正确使用:
    • __init__方法第一个参数必须是self,用于指代实例本身
    • 必须先创建类实例last_edit = Edit(),才能访问实例属性last_edit.change
  • 文件路径处理:
    • 用os.path.join()拼接路径,避免手动拼接字符串导致的格式错误
    • 修正了变量名拼写错误file_soure → file_source
  • 循环逻辑优化:
    • 直接遍历文件名列表,替代索引循环,代码更简洁且避免索引运算错误
    • 将文件名与对应修改时间绑定存储,方便后续对比变更

增量备份扩展思路

要实现“仅备份最近修改的文件”,可以:

  • 将上次记录的文件修改时间存储在本地文件(如JSON格式)
  • 每次运行时,对比当前文件修改时间与历史记录
  • 仅复制修改时间晚于历史记录的文件
  • 备份完成后更新本地存储的时间记录

内容的提问来源于stack exchange,提问作者Marcos.MAlmeida

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 05:15:36