2024-04-26 17:38:44 发布
网友
我有以下文件:
abcde kwakwa <0x1A> line3 linllll
其中<0x1A>表示十六进制值为0x1A的字节。尝试以如下方式在Python中读取此文件:
<0x1A>
它只读取前两行,然后退出循环。在
解决方案似乎是以二进制(或通用换行模式)—“rb”或“rU”打开文件。你能解释一下这种行为吗?在
Ned当然是正确的。在
如果你的好奇心更深一点,根本原因是向后兼容性被推向了极端。Windows与DOS兼容,DOS使用Ctrl-Z作为文本文件的可选文件结束标记。你可能不知道DOS与CP/M兼容,CP/M在PC出现之前在小型计算机上很流行。CP/M的文件系统没有记录文件大小到字节级,它只记录软盘扇区的数量。如果文件不是128字节的精确倍数,则需要一种方法来标记文本的结尾。This Wikipedia article意味着选择Ctrl-Z是基于DEC使用的一个更旧的约定
0x1A是Ctrl-Z,DOS过去曾将其用作文件结束标记。例如,尝试使用命令提示符,并“键入”文件。它只会在Ctrl-Z上显示内容
Python使用Windows的CRT函数&uwopen,它实现了“Ctrl-Z是EOF”语义。在
Ned当然是正确的。在
如果你的好奇心更深一点,根本原因是向后兼容性被推向了极端。Windows与DOS兼容,DOS使用Ctrl-Z作为文本文件的可选文件结束标记。你可能不知道DOS与CP/M兼容,CP/M在PC出现之前在小型计算机上很流行。CP/M的文件系统没有记录文件大小到字节级,它只记录软盘扇区的数量。如果文件不是128字节的精确倍数,则需要一种方法来标记文本的结尾。This Wikipedia article意味着选择Ctrl-Z是基于DEC使用的一个更旧的约定
0x1A是Ctrl-Z,DOS过去曾将其用作文件结束标记。例如,尝试使用命令提示符,并“键入”文件。它只会在Ctrl-Z上显示内容
Python使用Windows的CRT函数&uwopen,它实现了“Ctrl-Z是EOF”语义。在
相关问题 更多 >
编程相关推荐