|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
from pathlib import Path
import time
f = Path.cwd()
q = f.iterdir()
dic = {}
time_ = []
print("当前路径:",f)
for each in q:
if each.is_file():
dic[each.stat().st_mtime] = dic[each.name]
time_.append(each.stat().st_mtime)
time_ = sorted(time_)
name = dic[time_[-1]]
print("修改时间->",time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time_[-1])),"文件名->",name)
这是我的代码,首先将当前目录下的所有文件的修改时间和文件名存储至dic字典中,键为修改时间,文件名为值,并且将修改时间存储至列表time中,排序列表后time[-1]即为修改时间最大的值,通过这个值找到字典中的文件名
但是循环中的第一句(dic[each.stat().st_mtime] = dic[each.name])就报错,下面帖一下报错代码:
Traceback (most recent call last):
File "C:\Users\75574\Desktop\isPalindrome.py", line 10, in <module>
dic[each.stat().st_mtime] = dic[each.name]
KeyError: 'Adobe After Effects 2021.lnk'
这个keyerror百思不得其解啊,因为each.stat().st_mtime和each.name都是可以打印出来的,如下:
1675001335.939798
Adobe After Effects 2021.lnk
1674998012.653168
Adobe Illustrator 2021.lnk
1643424093.966148
Adobe Premiere Pro 2022.lnk
1679650589.6543558
CCtalk.lnk
1656213865.1332428
DeepL.lnk
1643335006.9238348
desktop.ini
1667559304.8656418
EV录屏.lnk
所以相当于键和值都是真,却返回key不存在的bug,有点头疼
问题出在这一句代码:
dic[each.stat().st_mtime] = dic[each.name]
在第一次循环中,字典 dic 中是没有任何元素的。因此,你尝试使用 dic[each.name] 作为 value 来赋值给 dic[each.stat().st_mtime] 的时候,因为 each.name 不存在于字典 dic 中而抛出 KeyError 异常。
此外,即使 dic 已经被初始化了,这一行代码仍然是错误的。你应该把 each.name 作为值,而不是作为键,因为你想要根据每个文件的修改时间来查找其名称。因此,你需要使用以下代码:
dic[each.stat().st_mtime] = each.name
这将把文件名作为值存储在字典 dic 中,使得每个 key(即修改时间)都对应着正确的文件名。
以下是更正后的代码:
from pathlib import Path
import time
f = Path.cwd()
q = f.iterdir()
dic = {}
time_ = []
print("当前路径:",f)
for each in q:
if each.is_file():
dic[each.stat().st_mtime] = each.name
time_.append(each.stat().st_mtime)
time_ = sorted(time_)
name = dic[time_[-1]]
print("修改时间->", time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time_[-1])), "文件名->", name)
|
|