2016-04-14 73 views
0

我想打開一個文件,閱讀內容,比較與散列,如果有必要再覆蓋文件。應該是基本的東西,但不知何故我無法讓它工作。我現在有:Python閱讀()不工作

with open(name, 'wb+') as des: 
    current_content = des.read() 

我100%肯定該文件不是空的,我期待在正確的文件(以後的數據被寫入到它,這工作),但不知何故current_content作爲結束空字符串。

with open(name, 'wb+') as des: 
    des.write('Test') 
    des.seek(0) 
    current_content = des.read() 

如果我嘗試上述current_content將返回'測試'。任何人都知道什麼會導致這種行爲?

+1

w +根據open()文檔截斷文件。 – srowland

回答

1

將文件讀取選項wb+更改爲ab+並立即測試。問題是ab+支持根據文檔在二進制文件中讀取和追加數據(At EOF)。當您使用wb+時,它可能會覆蓋現有文件。

+0

我現在很困惑,因爲我認爲ab +和wb +之間的唯一區別就是指針,開始或EOF的位置。切換到ab +不起作用,但切換到ab +並在我讀取之前將seek(0)固定。 所以如果我理解正確wb打開時立即覆蓋文件? – Matthieu

+0

我正在尋找相同的想法,即'wb +'在打開時覆蓋文件。但文件中隱含了重寫。如果我記得正確,''read''函數開始從頭讀取文件。所以尋求文件的開始。 – Mitty