whl wheel instalar como python windows binary-data

instalar - install wheel python



Lectura de lĂ­nea estrangula en 0x1A (2)

Tengo el siguiente archivo:

abcde kwakwa <0x1A> line3 linllll

Donde <0x1A> representa un byte con el valor hexadecimal de 0x1A. Al intentar leer este archivo en Python como:

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

Solo lee las dos primeras líneas y sale del bucle.

La solución parece ser abrir el archivo en modo binario (o modo de nueva línea universal) - ''rb'' o ''rU''. ¿Puedes explicar este comportamiento?


0x1A es Ctrl-Z, y DOS lo usó históricamente como marcador de fin de archivo. Por ejemplo, intente utilizar un símbolo del sistema y "escriba" su archivo. Solo mostrará el contenido en la Ctrl-Z.

Python usa la función CRT de Windows _wfopen, que implementa la semántica "Ctrl-Z es EOF".


Ned es por supuesto correcto.

Si su curiosidad es un poco más profunda, la causa raíz es la compatibilidad hacia atrás llevada al extremo. Windows es compatible con DOS, que usó Ctrl-Z como marcador opcional de fin de archivo para archivos de texto. Lo que quizás no sepa es que DOS era compatible con CP / M, que era popular en las computadoras pequeñas antes de la PC. El sistema de archivos de CP / M no realizaba un seguimiento de los tamaños de los archivos hasta el nivel de bytes, solo realizaba un seguimiento por el número de sectores de los disquetes. Si su archivo no era un múltiplo exacto de 128 bytes, necesitaba una forma de marcar el final del texto. Este artículo de Wikipedia implica que la selección de Ctrl-Z se basó en una convención aún más antigua utilizada por DEC.