Vous pouvez lire le fichier entier et les lignes de séparation en utilisant str.splitlines
:
temp = file.read().splitlines()
Ou vous pouvez dépouiller la nouvelle ligne à la main:
temp = [line[:-1] for line in file]
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:
with open(the_file, 'r+') as f:
f.seek(-1, 2) # go at the end of the file
if f.read(1) != '\n':
# add missing newline if not already present
f.write('\n')
f.flush()
f.seek(0)
lines = [line[:-1] for line in f]
Ou une alternative plus simple est à strip
la place de la nouvelle ligne:
[line.rstrip('\n') for line in file]
Ou même, bien qu'assez illisible:
[line[:-(line[-1] == '\n') or len(line)+1] for line in file]
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 à:
def readlines(self):
lines = []
for line in iter(self.readline, ''):
lines.append(line)
return lines
# or equivalently
def readlines(self):
lines = []
while True:
line = self.readline()
if not line:
break
lines.append(line)
return lines
Depuis, readline()
la nouvelle ligne la readlines()
conserve également .
Remarque: pour la symétrie de readlines()
la writelines()
méthode n'ajoute pas de fin de ligne, f2.writelines(f.readlines())
produit donc une copie exacte de f
in f2
.
[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
.