Python: Lire des espaces séparés des chaînes à partir d'un fichier similaires à readline
En Python, f.readline()
retourne la ligne suivante dans le fichier f
. Qui est, il commence à la position actuelle de f
, lit jusqu'à ce qu'il rencontre un saut de ligne, renvoie tout et met à jour la position de f
.
Maintenant, je veux faire exactement la même chose, mais pour les espaces des fichiers séparés (pas seulement des retours à la ligne). Prenons l'exemple d'un fichier f
avec le contenu
token1 token2
token3 token4
token5
Donc je suis à la recherche d'une fonction readtoken()
exemple, après l'ouverture de f
, le premier appel de f.readtoken()
retourne token1
, l'appel de la deuxième retuns token2
etc.
Pour plus d'efficacité et pour éviter des problèmes avec des lignes très longues ou de très gros fichiers, il ne devrait pas être mise en mémoire tampon.
J'étais presque sûr que cela devrait être possible, "out of the box" avec la bibliothèque standard. Cependant, je ne trouve pas de fonction appropriée ou une façon de redéfinir les délimiteurs de readline()
.
OriginalL'auteur azimut | 2013-05-06
Vous devez vous connecter pour publier un commentaire.
Vous auriez besoin de créer une fonction wrapper; c'est assez facile:
Noter que
.readline()
n'est pas juste de lire un fichier caractère par caractère jusqu'à ce qu'un saut de ligne est rencontré; le fichier est lu dans des blocs (un tampon) pour améliorer les performances.La méthode ci-dessus à la lecture du fichier par des lignes mais des rendements le résultat split sur les espaces. Utiliser comme:
Parce que
read_by_tokens()
est un générateur, vous avez besoin soit de boucle directement sur le résultat de la fonction, ou l'utilisation de lanext()
function pour obtenir jetons un par un:for line in f
plutôt quef.readline()
Vous devriez vraiment utiliser le fichier comme un itérateur de toute façon au lieu d'utiliser
.readline()
des appels, mais oui.Bien sûr. Je voulais juste qu'il soit bien clair depuis qu'il est venu demander à propos de
readline
. Vos modifications ont fait de mon commentaire superflu bien 🙂Merci pour cette explication! La lecture des appels dans des contextes différents, donc je ne vais pas l'utiliser comme un itérateur.
OriginalL'auteur Martijn Pieters