Python在接收文本行时会添加额外的CR符号。

7
一份Java应用向Python应用发送了一个XML文件,它们都位于同一台机器上。当我打开接收到的文件时,我可以看到额外的行(由于多余的CR)。这可能是什么原因导致的?
以下是接收者内容:
f = open('c:/python/python.xml', 'w')
while 1:
    print("xxx")        
    data = socket.recv(recv_frame)
    remain_byte = remain_byte - len(data)
    print(remain_byte)
    f.write(data)
    if (something):
        break

这是发件人:

    while ((bytesRead = file_inp.read(buffer)) > 0) {
        output_local.write(buffer, 0, bytesRead);
    }

这是原始文件:

<root><CR><LF>
    <SONG><CR><LF>
        <ARTIST>Coldplay</ARTIST><CR><LF>
    </SONG><CR><LF>
</root><CR><LF>

这是收到的内容:

<root><CR>
<CR><LF>
    <SONG><CR>
<CR><LF>
        <ARTIST>Coldplay</ARTIST><CR>
<CR><LF>
    </SONG><CR>
<CR><LF>
</root><CR>
<CR><LF>

这些应用程序运行在哪个操作系统上?是Windows吗? - gbulmer
1
你是否正在查看文件"c:/python/python.xml"?在Windows系统中,部分C库会进行回车/换行处理,以使UNIX文件与Windows文件兼容。Unix只使用一个字符作为行分隔符(\n),而Windows则使用cr+lf。因此,很有可能两个处理过程(Java和Python)将一个换行符扩展为两个。 - gbulmer
是的,我正在检查的文件是正确的。 - markAnthopins
3
将文件模式从'w'改为'wb' - Steven Rumbalski
如果我没记错的话,在写入文件时使用“wb”,这将抑制Python执行行分隔符扩展。 - gbulmer
wb解决了这个问题!太好了,谢谢! - markAnthopins
1个回答

7
将文件模式从'w'更改为'wb',否则Python会将任何换行符('\n')转换为特定于平台的表示形式(Windows下为'\r\n')。 二进制模式可以抑制这种转换。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接