Ajout de ligne dans un fichier existant d'avoir une nouvelle ligne dans Python
J'ai un fichier texte
apple banane
Maintenant vous regardez de près, il est ligne vide à la fin.
Lorsque en faire ajouter
f = open("file.txt",'a') f.write("orange") f.close()
- Je obtenir de sortie:
apple banane orange
Je veux supprimer la ligne vide en cours entre les ajoute.
Je sais que je peux le faire manuellement en allant dans le fichier et en enlevant l'excès de nouvelle ligne. Mais je veux le faire en python. Donc, chaque fois que la ligne vide est là sa devient automatiquement supprimés comme ceci:
apple banane orange
Je recherche et expérimenté, mais en vain
Comment est le vide de la ligne d'en arriver là, en premier lieu, si vous ajoutez à ce fichier?
Michael est le moyen le plus simple pour faire face à la nouvelle ligne est pour l'empêcher de jamais être écrite.
Son fichier de configuration qui vous parfois modifier manuellement et, par erreur, vous laissez une ou deux lignes vides. En fait utilisé mes multiples utilisateurs et de le modifier. De toute façon c'était juste ma curiosité comment puis-je le faire ..
Michael est le moyen le plus simple pour faire face à la nouvelle ligne est pour l'empêcher de jamais être écrite.
Son fichier de configuration qui vous parfois modifier manuellement et, par erreur, vous laissez une ou deux lignes vides. En fait utilisé mes multiples utilisateurs et de le modifier. De toute façon c'était juste ma curiosité comment puis-je le faire ..
OriginalL'auteur vipulb | 2012-06-28
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas, parce que, eh bien, en mode ajout est exactement cela: Il ajoute. Pour le retour à la ligne. Vous aurez à lire dans le fichier, supprimer le saut de ligne à la fin, l'écrire puis d'en ajouter.
Ou, ouvrez le fichier pour la lecture et l'écriture (mode
'r+'
), chercher à la fin, supprimer le saut de ligne, puis de continuer avec l'écrit.Je pense que cela pourrait faire l'affaire:
En outre, je ne pense pas que
f.seek(-1)
œuvres. Vous devezf.seek(-1, 2)
pour le premier appel etf.seek(-1, 1)
pour le deuxième.OriginalL'auteur Daren Thomas
utilisation:
"ab" au lieu de " une " de
OriginalL'auteur Ronny
Une solution simple consiste à remplacer la totalité du fichier au lieu de le modifier en place:
Ce code fonctionne très bien tant que le fichier n'est pas trop grand.
Vous pourriez le faire plus efficacement en ouvrant le fichier pour la lecture et l'écriture, trouver le nombre de caractères de saut de ligne à la fin du fichier, en cherchant à la position après la première fuite caractère de saut de ligne et l'écriture de la ligne à ajouter. C'est plus efficace, mais nécessite également plus élaborée du code, donc je ne pourrais que faire si la solution la plus simple n'est pas assez rapide.
Modifier: Voici mon point de vue sur la façon la plus efficace de le faire:
Cela fonctionne correctement pour n'importe quel nombre de de fuite caractères de saut de ligne, y compris aucun ou plus de deux.
OriginalL'auteur Sven Marnach
Voici une autre solution qui fonctionne avec le fichier en place:
Nous ouvrir le fichier pour la lecture et l'écriture (
'r+'
). Ensuite, nous cherchons à 2 octets à partir de la fin. Nous avons lu ces octets. (le pointeur de fichier n'est pas à la fin du fichier). Si ces octets sont à la fois des retours à la ligne, nous avons peu de recul sur un octet. Puis nous écrivons nos nouvelles données.MODIFIER Dans un cas plus général:
Semble fonctionner (après un peu d'expérimentation). Aussi, cette bande de hors d'espaces (et pas seulement des retours à la ligne). Une combinaison de cela, et la réponse par @SvenMarnach (qui plus élégamment utilisé
try
etexcept
d'intercepter les erreurs). Dans le cas de ma fonction, vous pouvez l'inclure dans unetry
/except
et de chercher à la position 0 siexcept IOError
se produit (puisque la fonction suppose qu'il existe certains non-blanc de texte dans le fichier).OriginalL'auteur mgilson
Je voudrais écrire ce code pour ajouter une nouvelle ligne à un fichier:
et ensuite de lire ce qu'il y a dans le fichier, lancez le shell et tapez:
Cela permettra d'imprimer tout le contenu du fichier.
J'espère que ça répond à votre question!!
OriginalL'auteur user7360021