Vous pouvez lire le fichier entier et diviser les lignes en utilisant str.splitlines
:
temp = file.read().splitlines()
Ou vous pouvez supprimer le saut de ligne manuellement :
temp = [line[:-1] for line in file]
Note : cette dernière solution ne fonctionne que si le fichier se termine par un saut de ligne, sinon la dernière ligne perd un caractère.
Cette hypothèse est vraie dans la plupart des cas (surtout pour les fichiers créés par des éditeurs de texte, qui ajoutent souvent un saut de ligne de toute façon).
Si vous souhaitez éviter cela, vous pouvez ajouter un saut de ligne à la fin du fichier :
with open(the_file, 'r+') as f:
f.seek(-1, 2) # aller à la fin du fichier
if f.read(1) != '\n':
# ajouter un saut de ligne manquant s'il n'est pas déjà présent
f.write('\n')
f.flush()
f.seek(0)
lines = [line[:-1] for line in f]
Ou une alternative plus simple est de strip
le saut de ligne à la place :
[line.rstrip('\n') for line in file]
Ou même, bien que assez illisible :
[line[:-(line[-1] == '\n') or len(line)+1] for line in file]
Ceci exploite le fait que la valeur de retour de or
n'est pas un booléen, mais l'objet qui a été évalué comme vrai ou faux.
La méthode readlines
est en fait équivalente à :
def readlines(self):
lines = []
for line in iter(self.readline, ''):
lines.append(line)
return lines
# ou de manière équivalente
def readlines(self):
lines = []
while True:
line = self.readline()
if not line:
break
lines.append(line)
return lines
Étant donné que readline()
garde le saut de ligne, readlines()
le garde également.
Note : pour la symétrie avec readlines()
, la méthode writelines()
n'ajoute pas de sauts de ligne à la fin, ainsi f2.writelines(f.readlines())
produira une copie exacte de f
dans f2
.
4 votes
Utilisez strip :
[l.strip('\n\r') for l in temp]
. Ou mêmerstrip
. Et comme il y a une itération ici, cela peut êtrein open
au lieu dein temp
.17 votes
Ce serait bien si en Python 3 il y avait une valeur pour définir l'argument
newline
de la fonction open sur le retrait des nouvelles lignes en fin de fichier.0 votes
Liés : stackoverflow.com/questions/275018/…