Python binaire EOF
Je veux lire un fichier binaire.
Googler "python binaire eof" m'a conduit ici.
Maintenant, les questions:
- Pourquoi le conteneur (x dans la réponse) contiennent pas un seul (actuelle) de l'octet, mais tout un tas de? Ce que je fais mal?
- Si il devait en être ainsi et que je fais rien de mal, COMMENT faire pour lire un octet? Je veux dire, est-il un moyen de détecter les expressions du FOLKLORE lors de la lecture du fichier avec
read(1)
méthode?
Je ne sais pas pourquoi je ne peux pas tord obtenir un peu d'aide de la communauté? Pourquoi les questions qui ne mérite pas un 5-page de réponse, une page de wiki, ou une place dans le glorieux temple de la renommée pour les grands obtiendrez TOUJOURS downvoted? Pourquoi devrais-je demande seulement à propos de la fusée-science?
Si vous n'êtes pas satisfait de la façon dont vous question sont perçus ici, un commentaire dans pas la réaction appropriée que la downvoter a disparu il ya longtemps -, et a probablement pas de lire ce commentaire. Mais d'autres peuples. Si vous avez vraiment pas d'accord et sont absolument certain que vos questions atteindre le la norme de qualité attendus ici, vous pouvez relancer votre cas sur meta. Mais prêt avant de le faire.
Si vous n'êtes pas satisfait de la façon dont vous question sont perçus ici, un commentaire dans pas la réaction appropriée que la downvoter a disparu il ya longtemps -, et a probablement pas de lire ce commentaire. Mais d'autres peuples. Si vous avez vraiment pas d'accord et sont absolument certain que vos questions atteindre le la norme de qualité attendus ici, vous pouvez relancer votre cas sur meta. Mais prêt avant de le faire.
OriginalL'auteur mekkanizer | 2014-08-23
Vous devez vous connecter pour publier un commentaire.
Pour citer le la documentation:
Qui signifie (pour un un fichier régulier):
f.read(1)
sera de retour un octet objet contenant soit 1 octet 0 octet est EOF a été atteintf.read(2)
sera de retour un octet objet contenant soit 2 octets, soit 1 octet si EOF est atteint après le premier octet, ou de 0 octet si EOF en a rencontré immédiatement.Si vous souhaitez lire votre fichier d'un octet à la fois, vous aurez à
read(1)
dans une boucle et test du "vide" du résultat:Si vous souhaitez lire votre fichier par "morceau" de dire 50 octets à la fois, vous aurez à
read(50)
dans une boucle:En fait, on peut même casser une itération plus tôt:
Concernant l'autre partie de votre question:
Se référant à ce code:
Pour citer de nouveau le le doc:
Le code ci-dessus lire un fichier binaire ligne par ligne. C'est en s'arrêtant à chaque occurrence de l'EOL char (
\n
). Habituellement, cela conduit à des segments de différentes longueurs comme la plupart des fichiers binaires contenant les occurrences de ce char distribués de façon aléatoire.Je ne voudrais pas vous encourageons à lire un fichier binaire de cette façon. Merci de préférer l'un à une solution basée sur
read(size)
.Pour le f.lire(1) exemple: si votre flux d'octets a un zéro octet, alors le test de la sortie précoce avant que vous ayez fini de lire le fichier
En Python, seulement vide séquences sont Faux (docs.python.org/3.1/library/stdtypes.html) Et ce qui n'est pas Faux est Vrai. Donc, si votre chaîne d'octets contient \x00, c'est pas vide, donc
b"\x00"
est Vrai. Vous pouvez tester que dans le REPL:"T" if b"\x00" else "F"
Mot pour le sage ici, il est important de comprendre ce qu'il se passe sous le capot lors de la mise en mémoire tampon des fichiers. Il ya en fait plusieurs objets mémoire tampon en cours de création qui contiennent des parties de la mémoire tampon de fichier. Voir ici. Python est censé faire ce peu probable, mais le classique problème soulevé par ce est que vous vous retrouvez avec une partie de votre fichier dans l'un de ces sous-jacent objets mémoire tampon lorsque vous avez terminé. Assurez-vous de rincer si vos données manquantes.
OriginalL'auteur Sylvain Leroux
""
signifiera la fin du fichierOriginalL'auteur Padraic Cunningham
Lire octet par octet:
mal.
not '\0'
estFalse
. Seulementnot ''
estTrue
.OriginalL'auteur Daniel