[英]Why does Python file.write() unexpectedly add a newline to every line?
我想在循環期間將字符串寫入文件:
with open("dump.txt", "w+") as file:
for x in range(1, 10):
file.write(str(x) + "\r\n")
如果我在 Windows 上的記事本中打開dump.txt
,我會得到我所期望的:
1
2
3
4
5
6
7
8
9
我必須在每一行的末尾添加\r\n
,否則我會得到123456789
(一行中的所有數字)。
當我在 Notepad++ 中檢查我的dump.txt
時,我可以看到在每一行之后我都會得到一個額外的 CRLF:
1 CRLF
CRLF
2 CRLF
CRFL
etc.
當我將dump.txt
讀回 python 並遍歷文件時,額外的 LF 是 output:
import sys
with open("dump.txt", "r") as infile:
for line in infile:
sys.stdout.write(line)
C:\...\Python\Python38-32\python.exe C:/.../script.py
1
2
3
如果我在 Windows 上使用記事本創建一個新文件並輸入數字 1 到 9,在每行后按回車,python 會正確讀取它。 在 Notepad++ 中,我也看不到任何額外的 CRLF 字符。
import sys
with open("dump2.txt", "r") as infile:
for line in infile:
sys.stdout.write(line)
C:\...\Python\Python38-32\python.exe C:/.../script2.py
1
2
3
...
9
我的問題是:我在這里錯過了什么? Python 似乎在每個 file.write() 中添加了第二個 CRLF,但前提是要寫入的字符串已經以"\r\n"
結尾。 這是一個非常奇怪的行為。
我想逐行編寫我的字符串,或者以我的顯式“\r\n”結尾,或者更好地使用運行腳本的平台的 EOL 字符,就像我剛剛使用手動創建一個 txt 文件一樣記事本..
非常感謝您的幫助!
Notepad ++ 中的 CRLF 表示“回車”,或者在 Python 中表示\r
。 如果您想在寫入時刪除它們,則只需輸入\n
即可。
Python 使用從 C 繼承的約定,即內部換行符始終是單個 LF(有時寫為 \n),無論平台約定是什么。 當一個文件以文本模式打開時,這是默認的,數據會在寫入/讀取時自動轉換為平台標准/從平台標准轉換。
您在 Windows 上,其中行尾約定是 CR+LF。 當您編寫 '\r\n'(即 CR + LF)時,它會轉換為 CR + CR + LF。 當你讀回來時,CR+LF 對被轉換為 LF,而“單獨的”CR:s 也被轉換為 LF:s!
如需更多閱讀,請從open
function 的文檔開始,然后點擊鏈接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.