我有一个简单的代码让我很烦:

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/

10-12 21:49