鱼C论坛

 找回密码
 立即注册
查看: 1338|回复: 5

[已解决][视频41] 课后作业关于写FileObject删除文件的问题

[复制链接]
发表于 2017-12-6 14:15:10 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 payton24 于 2017-12-6 14:19 编辑

按照标准答案,使用del函数只是删除了实例化对象的引用。
对于文件的删除,不是应该使用os.remove(name)吗?

如下文,标准答案代码为:
  1. class FileObject:
  2.     '''对文件对象进行包装,确认在删除时文件已关闭'''
  3.     def __init__(self, filename='sample.txt'):
  4.         #以读写模式打开文件
  5.         self.new_file = open(filename,'r+')

  6.     def __del__(self):
  7.         print('调用del方法')
  8.         self.new_file.close()
  9.         print('已关闭文件')
  10.         del self.new_file
复制代码


IDLE上运行:
a=FileObject(filename='F:/f3.txt')
del a
结果:只删除了a这个实例化对象。
其实self.new_file.close()这个语句即使不执行,也不妨碍a这个实例化对象的删除。

后文为自己调整后的代码,调用del a即可删除文件。
删除文件不是应该这样子写吗?

  1. import os
  2. class FileObject:
  3.     '''对文件对象进行包装,确认在删除时文件已关闭'''
  4.     def __init__(self, filename='sample.txt'):
  5.         #以读写模式打开文件
  6.         self.new_file = open(filename,'r+')
  7.         self.path=filename

  8.     def __del__(self):
  9.         print('调用del方法')
  10.         self.new_file.close()
  11.         print('已关闭文件')
  12.         os.remove(self.path)
复制代码


IDLE上运行:
a=FileObject(filename='F:/f3.txt')
del a
结果:删除了a指定的文件。
最佳答案
2017-12-6 14:21:43
题目的要求是删除对象的时候保证关闭文件,没说要把文件也删除了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-12-6 14:21:43 | 显示全部楼层    本楼为最佳答案   
题目的要求是删除对象的时候保证关闭文件,没说要把文件也删除了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-6 15:08:43 | 显示全部楼层
BngThea 发表于 2017-12-6 14:21
题目的要求是删除对象的时候保证关闭文件,没说要把文件也删除了

解答很迅速,谢谢。
不过如果是这样子的话,这题目出得也够蛋疼的

试想一下应用场景,粗心的小李常常打开文件忘记了关闭,结果删除文件时的操作就变成了:
filename='F:/f3.txt'
a=FileObject(filename)   #打开文件
del a                         #仅仅相当于关闭文件
os.remove(filename)   #删除文件

这样子的情景,小李以后不但还是会粗心,而且会逻辑混乱。明明想删除文件,还得用不同的姿势撸两下才行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-6 15:10:10 | 显示全部楼层
payton24 发表于 2017-12-6 15:08
解答很迅速,谢谢。
不过如果是这样子的话,这题目出得也够蛋疼的:

是这么回事,题目嘛
只要你能灵活运用,提出问题,又能解决问题就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-6 15:26:50 | 显示全部楼层
哈哈,也是,不过下次改版的话建议调整一下,让题目更加合理。不然怎能显得甲鱼老师学冠五车,技艺高超,还一心为人民服务,帮助广大群众解决实际问题呢 @@小甲鱼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-5 15:27:02 | 显示全部楼层
搜贴来的,赞同楼主的答案!
+1,楼主,我也想到这个问题了!
我认为的也是要删除这个文件
f1 = open('文件.txt')
del f1     #无论有没有提前关闭,都可以删除f1这个标签,不影响操作!
只有用remove真正去删除文件时才会报错,提示文件在使用。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-11 22:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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