擅长:python、mysql、java
<p>好吧,只有这些模式,它们都有你列出的“缺陷”。</p>
<p>你唯一的选择是包装<code>open()</code>。
为什么不做这样的事?(Python)</p>
<pre><code>def touchopen(filename, *args, **kwargs):
open(filename, "a").close() # "touch" file
return open(filename, *args, **kwargs)
</code></pre>
<p>它的行为就像open一样,如果您真的愿意,甚至可以将其重新绑定到open()。</p>
<p>open的所有功能都被保留,您甚至可以执行以下操作:</p>
<pre><code>with touchopen("testfile", "r+") as testfile:
do_stuff()
</code></pre>
<p>当然,您可以创建一个contextmanager,它以+模式打开文件,将其读入内存,并截取写操作,以便通过在w模式下神奇地创建一个临时文件来处理截断,并在关闭时将该临时文件重命名为原始文件,但我想这可能是过分了。</p>