Pour lire un fichier texte, en C ou en Pascal, j'utilise toujours les extraits suivants pour lire les données jusqu'à EOF:
while not eof do begin
readline(a);
do_something;
end;
Ainsi, je me demande comment puis-je faire cela simple et rapide en Python?
Boucle sur le fichier pour lire les lignes:
with open('somefile') as openfileobject:
for line in openfileobject:
do_something()
Les objets de fichier sont éditables et donnent des lignes jusqu'à EOF. L'utilisation de l'objet fichier en tant qu'itérable utilise un tampon pour garantir des lectures performantes.
Vous pouvez faire la même chose avec le stdin (inutile d'utiliser raw_input()
:
import sys
for line in sys.stdin:
do_something()
Pour compléter l’image, des lectures binaires peuvent être effectuées avec:
from functools import partial
with open('somefile', 'rb') as openfileobject:
for chunk in iter(partial(openfileobject.read, 1024), b''):
do_something()
où chunk
contiendra jusqu'à 1024 octets à la fois du fichier et l'itération s'arrêtera lorsque openfileobject.read(1024)
commencera à renvoyer des chaînes d'octets vides.
Vous pouvez imiter le langage C en Python.
Pour lire une mémoire tampon jusqu'à max_size
_ nombre d'octets, vous pouvez procéder comme suit:
with open(filename, 'rb') as f:
while True:
buf = f.read(max_size)
if not buf:
break
process(buf)
Ou, un fichier texte ligne par ligne:
# warning -- not idiomatic Python! See below...
with open(filename, 'rb') as f:
while True:
line = f.readline()
if not line:
break
process(line)
Vous devez utiliser la construction while True / break
car il y a no eof test dans Python _ autre que le manque d'octets renvoyés à partir d'une lecture.
En C, vous pourriez avoir:
while ((ch != '\n') && (ch != EOF)) {
// read the next ch and add to a buffer
// ..
}
Cependant, vous ne pouvez pas avoir ceci en Python:
while (line=f.readline()):
# syntax error
car les assignations ne sont pas autorisées dans les expressions en Python.
Il est certainement plus idiomatique dans Python pour ce faire:
# THIS IS IDIOMATIC Python. Do this:
with open('somefile') as f:
for line in f:
process(line)
Le langage Python permettant d'ouvrir un fichier et de le lire ligne par ligne est le suivant:
with open('filename') as f:
for line in f:
do_something(line)
Le fichier sera automatiquement fermé à la fin du code ci-dessus (la construction with
s'en occupe).
Enfin, il convient de noter que line
préservera la nouvelle ligne. Ceci peut être facilement enlevé en utilisant:
line = line.rstrip()
Bien qu'il y ait des suggestions ci-dessus pour "faire le python manière" ", si on veut vraiment avoir une logique basée sur EOF, alors je suppose que la gestion des exceptions est le moyen de le faire -
try:
line = raw_input()
... whatever needs to be done incase of no EOF ...
except EOFError:
... whatever needs to be done incase of EOF ...
Exemple:
$ echo test | python -c "while True: print raw_input()"
test
Traceback (most recent call last):
File "<string>", line 1, in <module>
EOFError: EOF when reading a line
Ou appuyez sur Ctrl-Z à l'invite raw_input()
(Windows, Ctrl-Z Linux)
Vous pouvez utiliser l'extrait de code ci-dessous pour lire ligne par ligne jusqu'à la fin du fichier.
line = obj.readline()
while(line != ''):
# Do Something
line = obj.readline()
Vous pouvez utiliser l'extrait de code suivant. readlines () lit tout le fichier à la fois et le scinde par ligne.
line = obj.readlines()