payton24 发表于 2017-12-6 14:15:10

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

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

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

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

    def __del__(self):
      print('调用del方法')
      self.new_file.close()
      print('已关闭文件')
      del self.new_file

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

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

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

    def __del__(self):
      print('调用del方法')
      self.new_file.close()
      print('已关闭文件')
      os.remove(self.path)

IDLE上运行:
a=FileObject(filename='F:/f3.txt')
del a
结果:删除了a指定的文件。

BngThea 发表于 2017-12-6 14:21:43

题目的要求是删除对象的时候保证关闭文件,没说要把文件也删除了

payton24 发表于 2017-12-6 15:08:43

BngThea 发表于 2017-12-6 14:21
题目的要求是删除对象的时候保证关闭文件,没说要把文件也删除了

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

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

这样子的情景,小李以后不但还是会粗心,而且会逻辑混乱。明明想删除文件,还得用不同的姿势撸两下才行。

BngThea 发表于 2017-12-6 15:10:10

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



是这么回事,题目嘛
只要你能灵活运用,提出问题,又能解决问题就行了

payton24 发表于 2017-12-6 15:26:50

哈哈,也是,不过下次改版的话建议调整一下,让题目更加合理。不然怎能显得甲鱼老师学冠五车,技艺高超,还一心为人民服务,帮助广大群众解决实际问题呢 @@小甲鱼

bravsheng 发表于 2021-8-5 15:27:02

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


页: [1]
查看完整版本: [视频41] 课后作业关于写FileObject删除文件的问题