我有一段简单的代码让我大吃一惊:
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,如果重要的话
如果您注意到,以
chr(10)
开头的内容保持不变并通过了断言测试。
所以真正的问题是为什么
chr(13)
被改为chr(10)
?为了回答这个问题,我们必须看看这些字符实际上代表什么。 chr(13)
是回车符,而 chr(10)
是换行符。
您提到您正在使用 Linux 机器。 Linux 使用 Unix 模型,在其文件中使用换行符而不使用回车符。因此,当将
CR
字符写入文件时,系统会将其转换为系统使用的 LF
字符。然后,您正在读取文件(带有翻译后的字符),因此您的断言失败。
这是一篇关于退货类型差异的好文章。
有人知道 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