练习3代码执行过程中报错
#清理重复的文件
#基本一切条件都不知道
import glob
data={}
#data = {'name': {'path/name': 'content', 'path2/name': 'content'}}
def clear(path):
result=glob.glob(path)
for _data in result:
if glob.os.path.isdir(_data):
_path=glob.os.path.join(_data,'*')
clear(_path)
else:
name=glob.os.path.split(_data[-1]) #提取文件名
try:
f=open(_data,'r')
content=f.read() #读取文件内容
except:
print(f"{_data} is unreadable")
else:
if name in data:
sub_data=data[name] #获取文件名下的二级信息
is_deleted=False
for k,v in sub_data.items():
if v == content: #比较文件的内容
glob.os.remove(_data)
print(f"{_data} will be deleted")
is_deleted=True
if not is_deleted:
data[name][_data] = content
else:
data[name]={
_data:content
}
finally:
f.close()
path=glob.os.path.join(glob.os.getcwd(),'*')
clear(path)
print(data)
data执行的结果没有像课堂上那样返回data字典,而是在删除文件的过程中疑似导致字典的items迭代出错。
求解决方法
29
收起
正在回答
1回答
同学,你好!报错原因是运行时错误:字典在迭代过程中改变了大小,同学的代码有以下两个问题:
1、在提取文件名时,[-1]应放在glob.os.path.split(_data)后面,可以使用print()输出查看,可参考下图的代码

2、在try...except...else语句中,else代码下的for循环语句应该和if语句在同一层次下,如下图

祝学习愉快!
Python全能工程师
- 参与学习 人
- 提交作业 16425 份
- 解答问题 4469 个
全新版本覆盖5大热门就业方向:Web全栈、爬虫、数据分析、软件测试、人工智能,零基础进击Python全能型工程师,从大厂挑人到我挑大厂,诱人薪资在前方!
了解课程

恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星