5.5 文件不存在才能寫入

2018-02-24 15:26 更新

問題

你想像一個(gè)文件中寫入數(shù)據(jù),但是前提必須是這個(gè)文件在文件系統(tǒng)上不存在。也就是不允許覆蓋已存在的文件內(nèi)容。

解決方案

可以在 open() 函數(shù)中使用x模式來代替w模式的方法來解決這個(gè)問題。比如:

>>> 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'
>>>

如果文件是二進(jìn)制的,使用 xb 來代替 xt
討論 這一小節(jié)演示了在寫文件時(shí)通常會(huì)遇到的一個(gè)問題的完美解決方案(不小心覆蓋一個(gè)已存在的文件)。 一個(gè)替代方案是先測(cè)試這個(gè)文件是否存在,像下面這樣:

>>> 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文件模式更加簡(jiǎn)單。要注意的是x模式是一個(gè)Python3對(duì) open() 函數(shù)特有的擴(kuò)展。在Python的舊版本或者是Python實(shí)現(xiàn)的底層C函數(shù)庫中都是沒有這個(gè)模式的。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)