如何用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
相关产品推荐
相关产品推荐

