Python open()模式和文件编写

a.m*_*.m. 1 python pygtk

我正在学习PyGTK,我正在制作一个文本编辑器(这似乎是pygtk的hello世界:))无论如何,我有一个"保存"功能,将TextBuffer写入文件.看起来像

try:
    f = open(self.working_file_path, "rw+")
    buff = self._get_buffer()
    f.write(self._get_text())
    #update modified flag
    buff.set_modified(False)
    f.close()

except IOError as e:
    print "File Doesnt Exist so bring up Save As..."
    ......
Run Code Online (Sandbox Code Playgroud)

基本上,如果文件存在,请将缓冲区写入其中,如果没有调出另存为对话框.

我的问题是:"更新"文件的最佳方法是什么.我似乎只能附加到文件的末尾.我尝试过各种文件模式,但我确定我错过了一些东西.

提前致谢!

Ben*_*Ben 6

可以"r+"模式下打开文件,这样您就可以读取和写入文件,并查找特定位置并在那里写入.这可能不会帮助你做我认为你想要的事情; 听起来你只想写出改变后的数据?

请记住,在磁盘上,文件不是作为一系列可扩展的行存储的,它只是一个字节序列; 其中一些字节表示行结尾,但下一行会立即跟进.因此,如果您编辑文件中的第一行并编写新的第一行,除非新的行恰好与旧行完全相同,否则第二行现在将不在正确的位置,因此您'我需要移动它(如果您写出的新行长于原始行,则首先复制它).现在这意味着下一行也不在正确的位置......依此类推,直到您必须读入并写出文件的其余部分.

在实践中,除非您可以简单地附加更多数据,否则几乎不会只写入现有文件的一部分; 如果你需要"改变"你读入的文件,在内存中更改它,然后将其写回或者你在文件中逐段读取(通常是逐行),然后在你去的时候写出一个文件(然后可能将新文件移到原始文件的顶部).第一种方法最简单,第二种方法更好,不必立即将整个内容保存在内存中.