gpt4 book ai didi

python - python 2 和 python 3 之间的 read() 区别

转载 作者:太空宇宙 更新时间:2023-11-03 12:56:00 27 4
gpt4 key购买 nike

使用以下 MWE:

with open('a','w') as f:
f.write('\r')
with open('a','r') as f:
print(ord(f.read()))

我得到以下输出:

$ python2 test.py 
13
$ python3 test.py
10

你能解释一下为什么吗?据我所知,13 是 ascii 和 UTF-8 中 \r 的预期十进制数。

最佳答案

Python 3's open默认为通用换行模式 (newline=None),而 Python 2's open仅当模式字符串包含 U 时才启用通用换行模式。

在通用换行模式下,序列 \r(旧 Mac)、\n(UNIX)或 \r\n(DOS/Windows) 都被识别为换行符,并自动转换为 \n 因此行尾具有一致的表示形式以简化字符串操作。

如果你想在 Python 2 中使用通用换行符,你可以使用模式字符串来启用它或者 use io.open ,这几乎完全等同于 Python 3 的内置 open(Python 3 上的 io.open 只是 open 的另一种表达方式) .

如果您想在 Python 3 上禁用通用换行符处理,请向 open 传递一个 newline='' 的参数(用于在阅读时换行的通用识别)/迭代,但没有行尾的翻译)或 newline='\n' (例如)表示只有 \n 被识别为行尾,并且同样,不执行行尾的翻译。传递 newline='' 是正确处理某些文件格式所必需的; csv 模块执行自己的行结束处理,newline='' 确保在信息到达 csv 阅读器之前不会丢失任何信息。

关于python - python 2 和 python 3 之间的 read() 区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41733922/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com