nol*_*eti 3 python newline line-endings python-2.x python-3.x
使用以下MWE:
with open('a','w') as f:
f.write('\r')
with open('a','r') as f:
print(ord(f.read()))
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
$ python2 test.py
13
$ python3 test.py
10
Run Code Online (Sandbox Code Playgroud)
你能解释一下原因吗?13是\rascii和UTF-8 的预期十进制数,据我所知.
Python 3open默认为通用换行模式(newline=None),而Python 2open仅在模式字符串包含时启用通用换行模式U.
在通用换行模式中,序列\r(旧Mac),\n(UNIX)或\r\n(DOS/Windows)都被识别为换行符,并自动转换为\n行尾,具有一致的表示以简化字符串操作.
如果你想在Python 2中使用通用换行符,你可以使用模式字符串来启用或使用io.open它,这几乎与Python 3的内置相当open(io.open在Python 3上只是另一种说法open).
如果要在Python 3上禁用通用换行处理,请传递open一个参数newline=''(用于通用识别,以便在读取/迭代时断行,但不转换行结尾)或newline='\n'(例如)表示仅\n被识别为行结束,再次,不执行行结尾的转换.传递newline=''需要妥善处理某些文件格式; 该csv模块进行处理结束自己的路线,并newline=''确保它到达之前,不会丢失任何信息csv的读者.
| 归档时间: |
|
| 查看次数: |
975 次 |
| 最近记录: |