Pourquoi les readlines () de Python donnent-ils plus de ' \ n ' entre les lignes lors de la lecture dun fichier texte?


Meilleure réponse

Parce que cest stupide. Je ne peux pas penser à une application utile de cette fonctionnalité et jai essayé de le faire.

(Voir la réponse de Romain pour une approche sérieuse sur «pourquoi exactement», jai juste besoin de flamboyer 🙂 Je peux fournir quelques solutions de contournement, cependant)

Pourquoi naccepte-t-il pas un paramètre de plus (cest-à-dire, «finir», qui est par défaut à «\ n», ou un indicateur booléen, keepnl = True), afin que je puisse choisir de conserver / modifier la fin de la ligne, si, et seulement si jen ai besoin, dépasse ma compréhension.

Ceci « décision politique » peu intuitive la rend pratiquement inutilisable et, au lieu de la lenteur et la difficulté à comprendre:

lines = [ ln[:-1] for ln in f.readlines() ]

Je préfère généralement

lines = f.read().split("\n")

Beaucoup plus simple à mes yeux. Je suppose quil est trop tard pour le changer maintenant.

Oui, il y a une possibilité dautres fins de ligne, selon le système dexploitation.

Je suppose que même les bibliothèques standard python ont leurs défauts aussi.

Réponse

Ces caractères sont pas extras. Ils sont présents dans le fichier texte. Ils marquent la fin des lignes.

Voici une autre façon de lire un fichier texte, appelé sample.txt, qui illustre.

>>> with open("sample.txt") as sample:

... contents = sample.readlines()

... print(contents)

...

["This is line number 1\n", "This is line number 2\n", "This is line number 3\n", "This is line number 4\n", "This is line number 5\n", "This is line number 6\n", "This is line number 7\n", "This is line number 8\n", "This is line number 9\n", "This is line number 10\n", "This is line number 11\n", "This is line number 12\n", "This is line number 13\n", "This is line number 14\n", "This is line number 15\n", "This is line number 16\n", "This is line number 17\n", "This is line number 18\n", "This is line number 19\n", "This is line number 20\n"]

  • Chaque ligne dans le la sortie se termine par \n car ceux-ci figuraient dans les lignes du fichier texte.
  • Vous feriez mieux dutiliser with lorsque vous ouvrez un fichier car cette construction organise la fermeture des fichiers après utilisation.
  • Je remarque que vous avez appelé votre fichier file. Vous devriez éviter dutiliser des noms qui font partie du langage Python.

Si vous voulez du code qui supprime les nouvelles lignes, voici une option:

>>> with open("sample.txt") as sample:

... for line in sample:

... print(line.rstrip())

...

This is line number 1

This is line number 2

This is line number 3

This is line number 4

This is line number 5

This is line number 6

This is line number 7

This is line number 8

This is line number 9

This is line number 10

This is line number 11

This is line number 12

This is line number 13

This is line number 14

This is line number 15

This is line number 16

This is line number 17

This is line number 18

This is line number 19

This is line number 20

Remarque t chapeau Jai utilisé rstrip qui supprime les espaces blancs uniquement de lextrémité droite dune chaîne.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *