【问题标题】:writing chr(13) to file gives chr(10) when read将 chr(13) 写入文件会在读取时给出 chr(10)
【发布时间】:2018-12-25 22:38:07
【问题描述】:

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

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


    【解决方案1】:

    如果您注意到,以 chr(10) 开头的内容保持不变并通过您的断言测试。

    所以真正的问题是为什么chr(13) 被更改为chr(10)?为了回答这个问题,我们必须看看这些字符中的每一个实际代表什么。 chr(13) 是回车符,chr(10) 是换行符。

    您提到您使用的是 Linux 机器。 Linux,利用 Unix 模型,在其文件中使用换行符而不使用回车符。因此,当将CR 字符写入文件时,系统会将其转换为系统使用的LF 字符。然后,您正在读取文件(带有翻译后的字符),因此您的断言失败。

    Here's 一篇关于退货类型差异的好帖子。

    【讨论】:

    猜你喜欢
    • 2014-04-26
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多