Vra

Ek het die volgende lêer:

abcde
kwakwa
<0x1A>
line3
linllll

Waar <0x1A> verteenwoordig 'n greep met die blok waarde van 0x1A. Wanneer 'n poging om hierdie lêer in Python as gelees:

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

Dit lees net die eerste twee lyne, en uitgange die lus.

Die oplossing blyk te wees om die lêer in binêre (of universele newline modus) oop te maak - 'rb "of" ru. Kan jy hierdie gedrag verduidelik?

Was dit nuttig?

Oplossing

0x1A is Ctrl-Z, en DOS histories gebruik wat as 'n einde-van-lêer merker. Byvoorbeeld, probeer om 'n opdrag prompt en "tipe" ing jou lêer. Dit sal slegs die inhoud van die Ctrl-Z vertoon word.

Python gebruik die Windows CRT funksie _wfopen, wat die implemente "Ctrl-Z is EOF" semantiek.

Ander wenke

Ned is natuurlik korrek is.

As jou nuuskierigheid loop 'n bietjie dieper, die oorsaak is backwards compatibility geneem om 'n uiterste. Windows versoenbaar is met DOS, wat Ctrl-Z gebruik as 'n opsionele einde van lêer merker vir teks lêers. Wat jy dalk nie weet nie, is dat DOS versoenbaar is met CP / M, wat gewild was op klein rekenaars voor die PC was. CP / M se lêer stelsel het nie tred met lêer groottes te hou tot op die byte vlak, dit net tred gehou deur die aantal floppy sektore skyf. As jou lêer was nie 'n presiese veelvoud van 128 grepe, jy 'n manier om die einde van die teks te merk nodig. Hierdie artikel Wikipedia impliseer dat die keuse van Ctrl-Z is gebaseer op 'n nog ouer konvensie wat gebruik word deur Desember

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top