Python tronquer les lignes qu'ils sont lus
J'ai une application qui lit les lignes d'un fichier et exécute sa magie sur chaque ligne est en lecture. Une fois que la ligne est lu et traité correctement, je voudrais supprimer la ligne dans le fichier. Une sauvegarde de la ligne supprimée est déjà observées. Je voudrais faire quelque chose comme
file = open('myfile.txt', 'rw+')
for line in file:
processLine(line)
file.truncate(line)
Cela semble être un problème simple, mais je voudrais le faire à droite plutôt que de tout un tas de compliqué seek() et tell() appels.
Peut-être tout ce que je veux vraiment faire est de supprimer une ligne en particulier à partir d'un fichier.
Après avoir passé trop de temps sur ce problème, j'ai décidé que tout le monde a probablement raison et ce il tout simplement pas une bonne façon de faire les choses. Il me semblait tellement solution élégante. Ce que je cherchais quelque chose qui s'apparente à une FIFO qui serait permettez-moi juste de la pop lignes d'un fichier.
Basé sur un fichier de la file d'attente: stackoverflow.com/questions/366533/...
OriginalL'auteur Ryan White | 2009-02-08
Vous devez vous connecter pour publier un commentaire.
Supprimer toutes les lignes après que vous avez fait avec eux:
Supprimer chaque ligne indépendamment:
Vous pouvez les laisser seulement les lignes qui cause les exceptions suivantes:
En général, comme les autres ont déjà dit que c'est une mauvaise idée de ce que vous essayez de faire.
Oui, il le fera. Exactement comme vous l'a demandé. Lorsque vous avez fait avec tous des lignes de vous'd comme pour les supprimer tous. Clarifier votre question si elle n'est pas.
Pas le cas dans mon post j'ai dit tous Ma question est de tronquer Une ligne
Votre montage est une approche intéressante. Semble que tout le monde déteste ce que je suis en train de faire, mais il est très valable de cas d'utilisation pour cela, je vous jure.
OriginalL'auteur jfs
Vous ne pouvez pas. Il n'est pas possible avec la réelle fichier texte implémentations actuelles sur les systèmes de fichiers.
Fichiers texte sont séquentiels, parce que les lignes dans un fichier texte peut être de n'importe quelle longueur.
La suppression d'une ligne en particulier signifierait réécrire l'ensemble du fichier à partir de ce point.
Supposons que vous avez un fichier grâce à 3 lignes;
À supprimer la deuxième ligne, vous auriez à déplacer les troisième et quatrième lignes, de positions dans le disque. Le seul moyen serait de stocker les troisième et quatrième lignes, quelque part, tronquer le fichier sur la deuxième ligne, et de réécrire les lignes manquantes.
Si vous connaissez la taille de chaque ligne dans le fichier texte, vous pouvez tronquer le fichier dans n'importe quelle position à l'aide de
.truncate(line_size * line_number)
mais même alors, vous auriez à réécrire tout ce qui est après la ligne.OriginalL'auteur nosklo
Vous êtes meilleur outre de maintenir un index dans le fichier de sorte que vous pouvez commencer où vous avez arrêté la dernière, sans en détruire une partie du fichier. Quelque chose de ce genre :
OriginalL'auteur sykora
Tronquer le fichier que vous lire il semble un peu extrême. Que faire si votre script est un bug qui n'entraîne pas une erreur? Dans ce cas, vous aurez envie de redémarrer au début de votre fichier.
Comment avoir votre script d'impression de la ligne numéro de pauses et de prendre un numéro de ligne en tant que paramètre de sorte que vous pouvez lui dire quelle ligne pour commencer le traitement?
OriginalL'auteur Imran
Tout d'abord, l'appel de l'opération
truncate
est probablement pas le meilleur choix. Si je comprends bien le problème correctement, vous souhaitez supprimer tout jusqu'à la position courante dans le fichier. (Je m'attends à cetruncate
de couper tout à partir de la position actuelle jusqu'à la fin du fichier. De cette façon, le standard de Pythontruncate
méthode fonctionne, au moins si j'ai Googlé correctement.)Deuxième, je ne suis pas sûr qu'il est sage de modifier le fichier lors de l'itération en utilisant le
for
boucle. Ne serait-il pas préférable d'enregistrer le nombre de lignes traitées et de les supprimer après la boucle principale a fini, d'exception ou pas? Le fichier itérateur prend en charge en place de filtrage, ce qui signifie qu'il doit être assez simple pour déposer les lignes traitées par la suite.P. S. je ne connais pas Python, prendre cela avec un grain de sel.
OriginalL'auteur zoul
Un poste a ce qui me semble être une bonne stratégie pour ce faire, voir
Comment puis-je lance le premier processus à partir d'une liste de processus stockées dans un fichier et de supprimer immédiatement la première ligne, comme si le fichier était une file d'attente et que j'ai appelé "pop"?
Je l'ai utilisé comme suit:
Je ne suis pas sûr qu'il fonctionne sur Windows.
Essayé sur un mac et il l'a fait faire l'affaire.
OriginalL'auteur gvrocha
C'est ce que j'utilise pour les fichiers basés sur des files d'attente. Il retourne la première ligne et réécrit le fichier avec le reste. Quand c'est fait, il retourne Aucun:
OriginalL'auteur Matt Kraemer