我有一个简单的代码让我很烦:
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
字符。然后,您正在读取文件(带有翻译的字符),从而使声明失败。
Here's关于收益类型差异的好文章。
关于python - 读取时将chr(13)写入文件会得到chr(10),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53926045/