Python >> Tutoriel Python >  >> Python

Impression Python sans saut de ligne supplémentaire lors de la lecture d'un fichier

Formulation du problème

Étant donné un fichier avec le nom file.txt et le contenu suivant :

hi
finxters!
:)

Vous avez créé un script Python qui lit le fichier ligne par ligne et imprime chaque ligne dans le shell comme suit :

with open("file.txt") as file:
    for line in file:
        print(line)

Mais la sortie ajoute de manière inattendue une nouvelle ligne supplémentaire à chaque ligne afin que vous obteniez la sortie suivante sur le shell Python :

hi

finxters!

:)

Comment imprimer sans les nouvelles lignes supplémentaires ?

Méthode 1 :print() avec end="Argument

Explication  :print() intégré de Python la fonction prend un end optionnel argument—par défaut défini sur le caractère de saut de ligne :end='\n' . Par conséquent, l'expression print(line) ajoute une nouvelle ligne à partir de l'instruction d'impression en plus de la nouvelle ligne lue à partir du fichier et stockée dans la variable line .

La solution consiste à supprimer l'un des caractères de retour à la ligne, par exemple en imprimant sans retour à la ligne en définissant l'argument end='' .

with open("file.txt") as file:
    for line in file:
        print(line, end = '')

La sortie affiche désormais correctement le contenu du fichier :

hi
finxters!
:)

Vous pouvez en savoir plus sur le print() fonction intégrée dans la vidéo suivante :

Méthode 2 :Supprimer la nouvelle ligne de la chaîne avec rstrip()

Lors de l'impression d'une ligne lue à partir d'un fichier, Python imprime un caractère de nouvelle ligne à partir du fichier et un à partir de l'instruction print. Vous pouvez vous débarrasser du caractère de nouvelle ligne dans le line en utilisant le line.rstrip() méthode qui supprime tous les espaces blancs à la fin de la ligne.

with open("file.txt") as file:
    for line in file:
        print(line.rstrip())

Encore une fois, la sortie affiche désormais correctement le contenu du fichier avec un seul caractère de saut de ligne entre les lignes :

hi
finxters!
:)

La vidéo suivante donne une courte introduction au string.rstrip() méthode—n'hésitez pas à regarder !

Techniquement, en utilisant string.rstrip() supprime tous les espaces blancs de la chaîne, même les caractères tabulaires '\t' et espaces vides ' ' . Si ce n'est pas ce que vous voulez, utilisez la méthode simple suivante :

with open("file.txt") as file:
    for line in file:
        print(line.rstrip('\n'))

Cela ne supprimera que le caractère de fin de ligne et non les espaces blancs restants. Une (pire) alternative est donnée ensuite pour plus de clarté :

Méthode 3 :Supprimer la nouvelle ligne de la chaîne avec découpage

Lors de la lecture d'un fichier ligne par ligne, chaque ligne a un caractère de fin de ligne. C'est le dernier caractère du line chaîne de caractères. Pour supprimer le dernier caractère de la ligne de chaîne, utilisez l'opération de découpage line[:-1] avec un indice négatif -1. Cela supprime de manière fiable le dernier caractère qui est le caractère de nouvelle ligne '\n' et évite d'imprimer deux fois la nouvelle ligne.

Mais la dernière ligne d'un fichier n'a pas de caractère de nouvelle ligne. Dans ce cas, pour éviter de supprimer le dernier caractère régulier, vous devez imprimer la dernière ligne telle quelle. Vous pouvez le faire avec un simple bloc if-else comme ceci :

with open("file.txt") as file:
    for line in file:
        if line[-1] == '\n':
            print(line[:-1])
        else:
            print(line)

Cependant, cette solution n'est pas aussi propre et Pythonic que les solutions précédentes. C'est un bon exercice sur un concept Python important, le tranchage, j'ai donc décidé de l'inclure quand même. Vous pouvez maîtriser le découpage ici :