5.5 文件ä¸�å˜åœ¨æ‰�能写入¶
问题¶
ä½ æƒ³åƒ�一个文件ä¸å†™å…¥æ•°æ�®ï¼Œä½†æ˜¯å‰�æ��必须是这个文件在文件系统上ä¸�å˜åœ¨ã€‚ 也就是ä¸�å…�许覆盖已å˜åœ¨çš„æ–‡ä»¶å†…容。
解决方案¶
å�¯ä»¥åœ¨ open() 函数ä¸ä½¿ç”¨ x 模å¼�æ�¥ä»£æ›¿ w 模å¼�的方法æ�¥è§£å†³è¿™ä¸ªé—®é¢˜ã€‚比如:
>>> with open('somefile', 'wt') as f:
... f.write('Hello\n')
...
>>> with open('somefile', 'xt') as f:
... f.write('Hello\n')
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
FileExistsError: [Errno 17] File exists: 'somefile'
>>>
如果文件是二进制的,使用 xb �代替 xt
讨论¶
这一å°�节演示了在写文件时通常会é�‡åˆ°çš„一个问题的完美解决方案(ä¸�å°�心覆盖一个已å˜åœ¨çš„æ–‡ä»¶)。 一个替代方案是先测试这个文件是å�¦å˜åœ¨ï¼Œåƒ�下é�¢è¿™æ ·ï¼š
>>> import os
>>> if not os.path.exists('somefile'):
... with open('somefile', 'wt') as f:
... f.write('Hello\n')
... else:
... print('File already exists!')
...
File already exists!
>>>
显而易è§�,使用x文件模å¼�æ›´åŠ ç®€å�•。è¦�注æ„�的是x模å¼�是一个Python3对 open() 函数特有的扩展。
在Python的旧版本或者是Python实现的底层C函数库ä¸éƒ½æ˜¯æ²¡æœ‰è¿™ä¸ªæ¨¡å¼�的。