2011-07-11 123 views
119

有没有办法打开文件的阅读和写作?我认为“r +”就是为了这个。
因为我正在处理二进制文件,所以我尝试了模式“r + b”,但是我得到一个文件未打开的错误消息。为阅读和写作打开文件?

+3

你要解决什么问题?可能比写/读文件有更好的解决方案,例如'mmap' –

+1

你能否给我们你的代码,以便我们能够回答你。您也可以尝试查看:http://docs.python.org/tutorial/inputoutput.html#reading-and-writing-files。不过,我试图使用r + b,它的工作原理。在diff函数中使用一个文件描述符还有什么好处吗? –

回答

30

r+是同时读写的规范模式。这与使用fopen()系统调用没有什么不同,因为file()/open()只是这个操作系统调用的一个小包装。

16

我已经试过这样的事情,它按预期工作:

f = open("c:\\log.log", 'r+b') 
f.write("\x5F\x9D\x3E") 
f.read(100) 
f.close() 

其中:

f.read(大小) - 要读取文件内容,需要调用f.read(大小),其中 读取一定数量的数据并将其作为字符串返回。

和:

f.write(串)字符串的内容写入文件,返回 无。你

此外,如果你打开Python tutorial about reading and writing files会发现:

'R +' 打开了读取和写入文件。

在Windows上,该模式附加的'b'以二进制模式打开文件,所以 也有'rb','wb'和'r + b'等模式。

+4

同样使用'r + b'模式阅读和写作同样好,但是你必须在f.read()和f.write()之间使用f.seek(0)来将光标放回到文件的开头。 – gaborous

+0

请注意,如果您正在编写的数据不再是已经存在的数据,它将不会被截断。使用'truncate'方法来阻止它。 – Flimm

176

下面是如何读取一个文件,然后写它(覆盖任何现有数据),而无需关闭并重新打开:

with open(filename, "r+") as f: 
    data = f.read() 
    f.seek(0) 
    f.write(output) 
    f.truncate() 
+15

使用'a +'来覆盖文件不存在的情况(将被创建) –

+9

seek()和truncate()都是关键! – smwikipedia

+1

请注意,这不适用于追加文字。 – multigoodverse