一行代码打开、写入并关闭文件
我在pathlib的参考文档里找到了一个示例代码,我想知道我该怎么关闭这个打开的文件。
p = Path('foo')
p.open('w').write('some text')
我尝试去关闭这个文件。
Path('foo').open('w').write('some text').close()
结果出现了一个错误:AttributeError: 'int' object has no attribute 'close'
,我明白了为什么会出现这个错误,原因在于下面这句话。
Python的文件方法write()会把一个字符串写入文件,但它没有返回值。
那么我该怎么关闭这个文件呢?
2 个回答
2
你错误地认为在文件句柄的上下文中会调用链式的 close()
。其实并不是这样的。那一行代码:
Path('foo').open('w').write('some text').close()
可以拆分成
a = Path('foo')
b = a.open('w')
c = b.write('some text')
c.close()
这样做其实没什么意义,因为 write()
返回的是写入的字节数,而不是一个句柄,所以 c
是一个 integer
(整数),这样错误就会更明显了。所以在不必要的时候不要过早地进行优化:
p = Path('foo')
handle = p.open('w')
handle.write('some text')
handle.close();
但是,这样做不符合 Python 的风格。你应该使用 with
:
with Path('foo').open('w') as handle:
handle.write('some text')
这样就可以自动处理文件的关闭了。
3
可以使用 pathlib.Path.write_text 这个函数来写文件,并且可以在一行代码里完成打开文件和关闭文件的操作:
这个函数会以文本模式打开指定的文件,写入数据,然后自动关闭文件:
Path('foo').write_text('some text')
注意,不能在 .write()
函数之后使用 .close()
,因为 .write()
会返回写入文件的字符数(整数)。
另外,还有一个 pathlib.Path.read_text 函数,可以用来读取文件内容,并且同样可以一次性完成打开和关闭文件的操作。