以艰难的方式学习Python。示例17打开一个文件,复制它,然后关闭它。其中一项研究是尽可能简化程序。但是,当我简化它时,似乎没有任何文件要关闭。我想用一个班轮理解的是,如果有的话,需要关闭。
例如 -
in_file = open(from_file)
indata = in_file.read()
...
in_file.close()
这可以简化为
indata = open(from_file).read()
我理解打开文件后关闭文件是个好习惯,但indata和from_file都是字符串。从更多的挖掘中,我理解这是unpythonic,应该在2行中为了可读性而完成,这将导致文件描述符。但是这里没有打开文件描述符来关闭。我错过了什么?我应该有一个明确关闭的文件描述符吗?
答案 0 :(得分:1)
而不是这样做
indata = open(from_file).read()
您应该尝试使用with
关键字
with open(from_file) as f: indata = f.read()
在前者中,您仍然拥有文件描述符,即使您没有任何引用,也无法保证文件何时关闭。在第二种方法中,一旦完成语句执行,文件就会被关闭。
答案 1 :(得分:0)
原因是indata
没有引用文件对象。
它指的是方法read()
返回的数据,因此当您尝试在该数据上调用close()
时,它将无效。
您需要对open()
和read()
保持单独的引用,或者使用内置的with()
内容。