En Python, appeler
temp = open(filename,'r').readlines()
résulte en une liste dans laquelle chaque élément est une ligne du fichier. C'est un peu stupide mais quand même: readlines()
écrit également un caractère de nouvelle ligne dans chaque élément, ce que je ne souhaite pas.
Comment puis-je l'éviter?
python
line-breaks
readlines
Yotam
la source
la source
[l.strip('\n\r') for l in temp]
. Ou mêmerstrip
. Et depuis l'itération ici, cela peut êtrein open
au lieu dein temp
.newline
argument ouvert à ces nouvelles lignes traînantes.Réponses:
Vous pouvez lire le fichier entier et les lignes de séparation en utilisant
str.splitlines
:Ou vous pouvez dépouiller la nouvelle ligne à la main:
Remarque: cette dernière solution ne fonctionne que si le fichier se termine par une nouvelle ligne, sinon la dernière ligne perdra un caractère.
Cette hypothèse est vrai dans la plupart des cas ( en particulier pour les fichiers créés par les éditeurs de texte, qui souvent font ajouter une nouvelle ligne de fin de toute façon).
Si vous voulez éviter cela, vous pouvez ajouter une nouvelle ligne à la fin du fichier:
Ou une alternative plus simple est à
strip
la place de la nouvelle ligne:Ou même, bien qu'assez illisible:
Ce qui exploite le fait que la valeur de retour de
or
n'est pas un booléen, mais l'objet évalué comme vrai ou faux.La
readlines
méthode est en fait équivalente à:Depuis,
readline()
la nouvelle ligne lareadlines()
conserve également .Remarque: pour la symétrie de
readlines()
lawritelines()
méthode n'ajoute pas de fin de ligne,f2.writelines(f.readlines())
produit donc une copie exacte def
inf2
.la source
[line.rstrip('\n') for line in file]
cela supprimera plus d'un suivi\n
.[line[:-(line[-1] == '\n') or len(line)+1] for line in file]
pourrait plutôt l'être[line[:-(line[-1] == '\n') or None] for line in file]
.for line in (x.strip() for x in f):
with
les fichiers sont fermés à la fin du bloc, ce qui signifie que vous ne pouvez pas fairewith open(...) as f: lines = (line for line in f)
et utiliser enlines
dehors dewith
car vous obtiendrez une erreur d'E / S. Vous pouvez être paresseux en utilisant un genexp, mais vous devez le consommer avant de fermer le fichier.la source
\r\n
nouvelles lignes? ;).split('\n')
se divise correctement, indépendamment de la convention de retour à la ligne. Il serait important que vous lisiez le fichier en mode binaire.Dans ce cas, ilsplitlines()
gère les sauts de ligne universels alors que cesplit('\n')
n'est pas le cas.os.linesep
:)\r\n
terminaisons de ligne de mon système ne sont pas converties en\n
, qu'elles soient lues en texte ou en binaire, doncos.linesep
fonctionnerait là où\n
cela ne fonctionne pas. Maissplitlines
c'est clairement le meilleur choix, dans le cas où vous mentionnez où le fichier ne correspond pas au système d'exploitation. Vraiment, je l'ai surtout mentionné au cas où les gens qui regardaient cette discussion n'étaient pas au courant de son existence.\r\n
-à- dire qu'ils seraient convertis pour les fichiers texte même lorsque vous utilisez Linux.un autre exemple:
Lecture du fichier une ligne à la fois. Suppression des caractères indésirables à partir de la fin de la chaîne
str.rstrip(chars)
voir aussi
str.strip([chars])
etstr.lstrip([chars])
(python> = 2.0)
la source
la source
Je pense que c'est la meilleure option.
la source
temp = [line.rstrip() for line in file.readlines()]
pour obtenir ce que les notes @Roland_Illig sont destinées..readlines()
, vous effectuez deux fois l'itération sur l'ensemble du fichier.Essaye ça:
la source
la source
.readlines()
comme ceci, vous parcourez efficacement le fichier entier deux fois.la source
la source