代码之家  ›  专栏  ›  技术社区  ›  Eli Bendersky

0x1A上的线路读取扼流圈

  •  13
  • Eli Bendersky  · 技术社区  · 17 年前

    abcde
    kwakwa
    <0x1A>
    line3
    linllll
    

    哪里 <0x1A> 表示十六进制值为0x1A的字节。在Python中尝试将此文件读取为:

    for line in open('t.txt'):
        print line,
    

    它只读取前两行,并退出循环。

    2 回复  |  直到 17 年前
        1
  •  28
  •   Ned Batchelder    17 年前

    0x1A是Ctrl-Z,DOS历来将其用作文件结束标记。例如,尝试使用命令提示符,并“键入”您的文件。它将只在Ctrl-Z上显示内容。

    Python使用Windows CRT函数wfopen,它实现了“Ctrl-Z是EOF”语义。

        2
  •  9
  •   Community Mohan Dere    9 年前

    Ned

    如果你的好奇心更深一点,根本原因是向后兼容性达到了极限。Windows与DOS兼容,DOS使用Ctrl-Z作为文本文件的可选文件结束标记。您可能不知道的是,DOS与CP/M兼容,在PC出现之前,CP/M在小型计算机上很流行。CP/M的文件系统不跟踪文件大小到字节级别,它只跟踪软盘扇区的数量。如果文件不是128字节的精确倍数,则需要一种标记文本结尾的方法。 This Wikipedia article 这意味着Ctrl-Z的选择基于DEC使用的更旧的约定。