La lecture d'un nombre entier à l'aide de python
Comment puis-je lire des int à partir d'un fichier? J'ai un grand(512 MO) fichier txt qui contient des données integer:
0 0 0 10 5 0 0 140
0 20 6 0 9 5 0 0
Maintenant si j'utilise c = file.read(1)
, je reçois un seul caractère à la fois, mais j'ai besoin d'un nombre entier à un moment. Comme:
c = 0
c = 10
c = 5
c = 140 and so on...
Tout grand coeur, s'il vous plaît aider. Merci à l'avance.
OriginalL'auteur whoone | 2012-07-19
Vous devez vous connecter pour publier un commentaire.
Voici un moyen:
En faisant
for line in f
vous lisez peu à peu (à l'aide de niread() all
nireadlines
). Important parce que votre fichier est volumineux.Alors vous diviser chaque ligne sur des espaces, et de lire chaque numéro que vous allez.
Vous pouvez faire plus de la vérification des erreurs de ce simple exemple, qui barf si le fichier contient des données corrompues.
Comme les commentaires le disent, cela devrait être assez pour vous, sinon si il est possible que votre fichier peut être extrêmement long des lignes que vous pouvez faire quelque chose de plus délicat comme la lecture des blocs à la fois.
Si il a une ligne, il pourrait sortir de la mémoire, je pense.
Les OP le montre l'exemple de retours à la ligne.
Vous avez raison, j'ai manqué ça.
C'est génial. Pouvez vous s'il vous plaît mettre à jour si le fichier contient un onglet plutôt que de l'espace?
OriginalL'auteur azhrei
512 MO est vraiment pas grand. Si vous allez créer une liste de données de toute façon, je ne vois pas le problème avec la lecture de l'étape en une seule fois:
si vous pouvez structurer votre code, de sorte que vous n'avez pas besoin de la totalité de la liste dans la mémoire, il serait préférable d'utiliser un générateur:
et ensuite l'utiliser:
vous pourrez rencontrer des problèmes avec la taille de la chaîne de split() peut gérer à long avant de vous lancer de la mémoire, par exemple. demander pour les 50 premiers mots
open('input.txt').read()[:2**25].split(' ', 50)
fonctionne pour moi, tandis qu'un "légèrement" plus long préfixeopen('input.txt').read()[:2**26].split(' ', 50)
soulève un MemoryError..OriginalL'auteur thebjorn
Je voudrais faire de cette façon:
Pourquoi 8192 octets? Ne serait-il pas plus naturel de lire par le disque de la taille du bloc (ou de la mémoire taille de la page) si vous allez par le biais de la peine de faire un lit? Aussi, votre contour des feuilles de la dernière int dans le fichier..
OriginalL'auteur Arkadiusz 'flies' Rzadkowolski