2014-02-07 38 views
13

Python 2.7 documentation(和Python 3 documentation以及)包含有關os.linepath功能下面一行:爲什麼在文本模式下編輯時不應該使用os.linesep?

時寫入文件在文本模式(默認)打開 不要使用os.linesep作爲行終止;

這是爲什麼?它與在二進制模式下使用它有什麼不同?

+2

@mhlester他們沒有解釋它,因爲它是一個不必要的實現細節。在寫入文件時,所有'\ n'都會根據您的操作系統轉換爲'os.linesep'。讀取文件時,基於您的操作系統的所有'os.linesep'都會轉換爲'\ n'。 –

+2

@AdamSmith:如果它是「不必要的實現細節」,爲什麼要提及它?如果你需要提及它,因爲人們做錯了錯誤的事情,這引起了太多的困惑,所以你可以解釋一下實現細節,以及爲什麼你不應該使用它...... – dangonfast

回答

17

當您在文本模式下打開文件時,您寫入文件的任何\n都會轉換爲適用於您所用平臺的相應行。

因此,舉例來說,如果你是在Windows上,其中os.linesep'\r\n',當你寫一個文件的\n將獲得自動轉換爲\r\n,你將結束與\r\r\n寫入文件。

例如:

>>> import os 
>>> os.linesep 
'\r\n' 
>>> with open('test.txt', 'w') as f: 
...  f.write(os.linesep) 
... 
>>> with open('test.txt', 'rb') as f: 
...  print repr(f.read()) 
... 
'\r\r\n' 
相關問題