擅长:python、mysql、java
<p>这是一个肮脏的秘密,但很少有应用程序能够真正改变一个文件“原地”。大多数情况下,应用程序看起来是在修改文件,但在后台,编辑的文件被写入临时位置,然后移到原来的位置。你知道吗</p>
<p>如果你仔细想想,当你在文件中间插入几个字节时,无论如何,你必须从这一点重写整个文件。你知道吗</p>
<p>由于ascii输出往往比unicode输入小,所以您可能可以得到这样的结果(我想只有unix):</p>
<pre><code> #!/usr/bin/env python
import os
from unidecode import unidecode
def unidecode_file(filename):
# open for write without truncating
fd = os.open(filename, os.O_WRONLY)
pos = 0 # keep track of file length
# open for read
with open(filename) as input:
for line in input:
ascii = unidecode(line.decode('utf-8'))
pos += len(ascii)
os.write(fd, ascii)
os.ftruncate(fd, pos) # truncate output
os.close(fd) # that is all, folks
if __name__ == '__main__':
unidecode_file('somefile.txt')
</code></pre>
<p>这种特技是不安全的,也不是编辑文件的标准方法(如果输出大于输入,您肯定会遇到麻烦)。使用<a href="https://stackoverflow.com/users/2210270/drew">Drew</a>建议的tempfile方法,但要确保文件名的唯一性(最安全的方法是为临时文件生成随机文件名)。你知道吗</p>