Python分行符號問題:rn還是n?

來源:互聯網
上載者:User
執行以下Python代碼:

fn = 'test.txt'
file(fn, 'w+').write('test\ntest2')
content = file(fn, 'r').read()
print content.replace('\r', '\\r').replace('\n', '\\n')

列印的結果不依賴平台,都是:
test\ntest2
但是test.txt的內容卻依賴平台而變化(用notepad++、vi等程式查看):
windows下是:test\r\ntest2
linux下卻是:test\ntest2

我想問的問題是,如何保證Python寫入檔案的'\n'字元不隨平台變化,即保證一定是'\n'?

回複內容:

章碩,js & python
夏一一、喬3少 贊同
這不是python的問題,windows的換行是\r\n,unix的是\n,mac的是\r。
這是一個很經典的問題。因為不同系統下預設的分行符號不同。字元處理時候,這樣的“不同”會帶來很大的問題,例如line[-2]和line.strpi()會因為平台不同返回不同的值。

解決方案:
Python 2
PEP 278 -- Universal Newline Support ,感謝畢勤的補充 ):
1)如果不是txt檔案,建議用wb和rb來讀寫。通過二進位讀寫,不會有換行問題。
2)如果需要明文內容,請用rU來讀取( 強烈推薦),即 U通用換行模式(Universal new line mode)。 該模式會把所有的分行符號(\r \n \r\n)替換為\n。只支援讀入,但是也足夠了。這是Python 提供給我們的最好的選擇,沒有之一。

對比r和rU的結果:
content = file(fn, 'r').read()# test\r\ntest2# 這裡的換行會因不同系統而不同                       
file(fn, 'w+').write('test\ntest2')
改成
file(fn, 'wb+').write('test\ntest2')
就行了。Windows 平台上 Python 區分 Binary 和 ASCII 模式。ASCII 模式下分行符號會在讀寫時自動換為 \r\n (詳見 [1])。*nix 平台下沒有這個區別。
[1]: http://docs.python.org/tutorial/inputoutput.html#reading-and-writing-files python可以根據系統自動選擇分行符號,只要使用 os.linesep 就可以判斷出來 這不是python的問題,windows的換行是\r\n,unix的是\n,mac的是\r。 回答除了第一個都略微偏題了. 個人習慣來說,當編輯檔案時,盡量使用二進位格式,這樣會避免跨平台時出錯. 根本不需要知道每個平台是\r,還是\n. 只要養成 rb,wb等習慣就行了. Rio 就是一個很好的編程習慣.不特別指定的話,python會自適應各個平台的差異,比如\n 和 \r\n的不同。
想達到樓主的目地,可以用二進位模式開啟和操作檔案即可。現在這個答案已經錯了0.0,正確如下(在不可預見的未來,這個答案也很可能錯了,期待有人@我)。
在遠古時代:windows的換行是\r\n,unix的是\n,mac的是\r完全正確!
Mac OS 9 以及之前的系統的分行符號是 CR(\r),從 Mac OS X (後來改名為“OS X”)開始的分行符號是 LF(\n)。
參考Did Mac OS Lion switch to using line feeds (LF '\n') for line breaks instead of carriage returns (CR '\r')? 我知道的一點是:CLRF結尾的檔案可以用【dos2unix】命令轉換為RF結尾的檔案。
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.