Python >> Tutoriel Python >  >> Python

Comment lire un fichier sans retour à la ligne en Python ?

Une nouvelle ligne est utilisée pour marquer la fin d'une ligne et le début d'une nouvelle, et dans cet article, nous allons voir comment lire un fichier en Python sans ces sauts de ligne.

Pour commencer nous allons créer un simple .txt dossier. Après chaque ligne de texte, la touche Entrée/Retour du clavier est enfoncée, créant une nouvelle ligne dans le fichier lui-même. Ceci est montré, à des fins d'illustration uniquement, explicitement avec les mots (retour) ci-dessous que nous enregistrons dans un fichier appelé newline.txt :

newline.txt:Hello(return)
my(return)
name(return)
is(return)
Rikesh.(return)

Contexte :Ouvrir et lire un fichier

Maintenant que nous avons notre .txt de base fichier, commençons par voir ce qui se passe lorsque nous ouvrons et lisons le fichier. Lorsque nous ouvrons un fichier en Python, nous pouvons le lire en passant le 'r' paramètre dans notre déclaration ouverte. La méthode la plus simple pour ouvrir et lire un fichier est la suivante :

file= open("newline.txt", "r")
file.read()
# 'Hello\nmy\nname\nis\nRikesh.\n'

En utilisant cette méthode, nous pouvons voir que la nouvelle ligne est lue par Python et représentée par le ‘\n’ personnage. Ce \n est le caractère spécial Python pour une nouvelle ligne.

Une manière beaucoup plus propre d'ouvrir des fichiers en Python consiste à utiliser le ‘with open’ déclaration car cela fermera automatiquement le fichier une fois terminé. Nous allons continuer à lire le fichier en utilisant le ‘r’ paramètre et exécutera un print déclaration pour ranger notre sortie :

with open("newline.txt", "r") as file: 
    line = file.read()
    print(file)


Sortie :

Hello
 my
 name
 is
 Rikesh.

Bien qu'il puisse sembler différent de l'exemple précédent, en utilisant notre déclaration d'impression, nous venons de demander à Python d'implémenter le code de nouvelle ligne. En fait, notre sortie ressemble à ceci :

Hello\nmy\n
name\n
is\n
Rikesh.\n

Méthode 1 :Fractionner avec splitlines() et split(‘\n’)

splitlines() est une méthode Python qui divise une chaîne en une liste, où chaque ligne est un élément de liste. Par défaut, cette méthode divise la ligne au saut de ligne :

with open("newline.txt", "r") as file: 
    line=file.read().splitlines()
    print(line)

# ['Hello', 'my', 'name', 'is', 'Rikesh.']

Le split() La méthode Python fait effectivement la même chose, mais nous pouvons spécifier le séparateur, c'est-à-dire à quel point nous souhaitons que la scission ait lieu. Dans notre exemple, ce serait au \n caractère, qui comme nous l'avons vu est la représentation Python d'une nouvelle ligne :

with open("newline.txt", "r") as file: 
    line=file.read().split("\n")
    print(line)

# ['Hello', 'my', 'name', 'is', 'Rikesh.']

Bien que ces deux méthodes suppriment les retours à la ligne, par défaut, chacune de nos lignes de texte d'origine a été renvoyée sous la forme d'un élément distinct dans une liste. Ceci, évidemment, a une fonctionnalité limitée à moins que notre fichier initial ne contienne des éléments de chaîne individuels que nous voulions garder séparés en premier lieu - par exemple, une liste de nombres. Dans notre exemple, avec un fichier texte pur, la sortie est moins utile.

Méthode 2 :Supprimer avec strip() et rstrip() 

En Python, le strip() La méthode est utilisée pour supprimer les espaces au début (de début) et à la fin (de fin) d'une chaîne. Par défaut, cela inclut non seulement les espaces blancs, mais également les caractères de nouvelle ligne. Cela serait mieux illustré par quelques petites modifications à notre fichier d'origine :

newline_space.txt:  Hello (return)
   my     (return)
name (return)
is(return)
   Rikesh.    (return)

Bien que le texte réel soit le même, nous avons ajouté des espaces avant et après nos entrées de texte. La dernière chose à noter avec cette méthode est que, comme elle fonctionne dans notre fichier chaîne par chaîne, nous devons parcourir notre fichier pour garantir strip() appliqué à chaque chaîne :

with open("newline_space.txt", "r") as file: 
    newline_breaks=""
    for line in file: 
        stripped_line = line.strip()
        newline_breaks += stripped_line
    print(newline_breaks)

# HellomynameisRikesh.

Comme nous pouvons le voir, le strip() La méthode a non seulement supprimé la nouvelle ligne, mais également tous les espaces blancs de début et de fin. Bien que cela puisse être une fonctionnalité utile, que se passerait-il si nous voulions conserver les espaces blancs et simplement nous débarrasser du caractère de nouvelle ligne ? Eh bien, nous pouvons le faire en passant \n comme paramètre dans notre split() méthode :

with open("newline_space.txt", "r") as file: 
    newline_breaks=""
    for line in file: 
        stripped_line = line.strip(‘\n’)
        newline_breaks += stripped_line
    print(newline_breaks)

# Hello    my     name is   Rikesh.  

Alors que le strip() affecte à la fois les espaces de fin et de début, nous pouvons utiliser rstrip() pour supprimer uniquement les caractères de fin, c'est-à-dire ceux à la fin de la chaîne. Comme les sauts de ligne ont tendance à être à la fin d'une chaîne, cette méthode est préférée à lstrip() qui n'affecte que les caractères au début de la chaîne. Encore une fois, on peut passer le \n paramètre pour s'assurer que nous ne supprimons que les caractères de nouvelle ligne :

with open("newline_space.txt", "r") as file: 
    newline_breaks=""
    for line in file: 
        stripped_line = line.rstrip(‘\n’)
        newline_breaks += stripped_line
    print(newline_breaks)

 Hello    my     name is   Rikesh.   

Méthode 3 :Découpage

Une autre façon de supprimer la nouvelle ligne est de découper, mais il convient de noter que cela doit être utilisé avec une extrême prudence car il est moins ciblé que nos autres méthodes. Avec le découpage, nous pouvons demander à Python de supprimer le dernier caractère de chaque chaîne, via un découpage négatif [:-1] . Comme avec strip() nous devons itérer sur notre fichier :

with open("newline.txt", "r") as file: 
    newline_breaks=""
    for line in file: 
        stripped_line = line[:-1]
        newline_breaks += stripped_line
    print(newline_breaks)

# HellomynameisRikesh.

Cependant, gardez à l'esprit que le découpage est aveugle - il ne se souciera pas du dernier caractère et nous ne pouvons pas le spécifier. Ainsi, bien que cela fonctionne lorsque notre fichier d'origine est cohérent et que tous les sauts de ligne sont aux bons endroits, que se passe-t-il si ce n'est pas le cas ? Modifions notre fichier d'origine pour le rendre moins cohérent et plus proche du type de fichier réel auquel nous sommes susceptibles d'avoir affaire :

newline_slice.txt:Hello(return)
my(return)
name(return)
is(return)
Rikesh

Dans ce fichier, le point et le retour à la fin de la dernière ligne ont été supprimés, donc le dernier caractère de ce script est ‘h’ . Il est important de noter qu'il n'y a pas d'espaces ou de retours après ce caractère. Maintenant, si nous essayons de découper ce fichier :

with open("newline_slice.txt", "r") as file: 
    newline_breaks=""
    for line in file: 
        stripped_line = line[:-1]
        newline_breaks += stripped_line
    print(newline_breaks)

# HellomynameisRikes

La sortie a tranché (coupé) le dernier caractère de mon nom. Nous devons donc nous assurer de l'intégrité et de la mise en forme de notre fichier d'origine avant de pouvoir utiliser cette méthode, sinon nous risquons de perdre des données.

Méthode 4 :Remplacer

La dernière méthode que nous allons examiner est replace() . Comme son nom l'indique, nous pouvons l'utiliser pour remplacer une phrase spécifique dans notre chaîne par une autre phrase spécifique. Comme nous nous attendrions à ce que le saut de ligne soit utilisé lorsqu'il y a une sorte de rupture logique dans notre texte, un choix évident serait de le remplacer par un espace, ce que nous pouvons faire avec " " . Cette méthode nous oblige également à itérer sur notre fichier :

with open("newline.txt", "r") as file: 
    newline_breaks = ""
    for line in file: 
        stripped_line = line.replace('\n', " ")
        newline_breaks += stripped_line
    print(newline_breaks)

# Hello my name is Rikesh.

Bien que cela nous ait donné le formatage le plus propre de tous nos exemples, c'est uniquement à cause du formatage de notre fichier d'origine. Cependant, replace() a la flexibilité de permettre aux caractères de nouvelle ligne d'être remplacés par ce qui est le plus approprié pour notre fichier particulier.

Résumé

Nous avons vu un certain nombre de méthodes différentes pour lire un fichier sans retour à la ligne. Chacun est efficace à sa manière et fait le travail de suppression de nos nouvelles lignes, il n'y a donc pas de bonne réponse. La méthode correcte dépendra du fichier d'origine à partir duquel nous travaillons, à la fois en termes de contenu (texte brut, nombres entiers) et de formatage (espaces, cohérence).

Si vous devez séparer les éléments, le fractionnement peut être la meilleure option. Si vous avez besoin de concaténer la sortie, le remplacement ou la suppression peut être la solution. Ouvrir et lire d'abord le fichier, sans aucun formatage pour évaluer le contenu et la structure du fichier, serait l'étape la plus importante pour décider de la méthode la plus adaptée à vos besoins.