将 chr(13) 写入文件时,读取时会给出 chr(10)

问题描述 投票:0回答:2

我有一段简单的代码让我大吃一惊:

if __name__ == '__main__':
    writen_text = chr(13)
    file = open('bug', 'w')
    file.write(writen_text)
    file.close()
    file = open('bug')
    read_text = ''.join(file.readlines())
    print([ord(c) for c in writen_text])
    print([ord(c) for c in read_text])
    assert writen_text == read_text

输出为

[13]
[10]
Traceback (most recent call last):
  File "/bug.py", line 10, in <module>
    assert writen_text == read_text
AssertionError

这是什么???我只想将文本写入文件并准确读取该文本而不进行任何更改

Python3.6.6,Ubuntu18.04,如果重要的话

python python-3.x io carriage-return linefeed
2个回答
3
投票

如果您注意到,以

chr(10)
开头的内容保持不变并通过了断言测试。

所以真正的问题是为什么

chr(13)
被改为
chr(10)
?为了回答这个问题,我们必须看看这些字符实际上代表什么。
chr(13)
是回车符,而
chr(10)
是换行符。

您提到您正在使用 Linux 机器。 Linux 使用 Unix 模型,在其文件中使用换行符而不使用回车符。因此,当将

CR
字符写入文件时,系统会将其转换为系统使用的
LF
字符。然后,您正在读取文件(带有翻译后的字符),因此您的断言失败。

这是一篇关于退货类型差异的好文章。


0
投票

有人知道 chr(855) 是什么吗?

我无法使用谷歌找到一些东西。但我尝试执行这个:

tst=chr(65)
print(tst)
tst=chr(855)
print(tst)
tst=chr(65)
print(tst)
tst=chr(13)
print(tst)
tst=chr(65)
print(tst)
tst=chr(10)
print(tst)
tst=chr(65)
print(tst)

输出:

A

A

A


A
© www.soinside.com 2019 - 2024. All rights reserved.