2011-07-11 126 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