J'essaie de déterminer le meilleur moyen de se débarrasser des nouvelles lignes lors de la lecture de fichiers délimités par des lignes nouvelles en Python.
Ce que j’ai trouvé, c’est le code suivant, avec un code à jeter pour tester.
import os
def getfile(filename,results):
f = open(filename)
filecontents = f.readlines()
for line in filecontents:
foo = line.strip('\n')
results.append(foo)
return results
blahblah = []
getfile('/tmp/foo',blahblah)
for x in blahblah:
print x
Suggestions?
lines = open(filename).read().splitlines()
Voici un générateur qui fait ce que vous avez demandé. Dans ce cas, utiliser rstrip est suffisant et légèrement plus rapide que strip.
lines = (line.rstrip('\n') for line in open(filename))
Cependant, vous voudrez probablement utiliser cette option pour vous débarrasser également des espaces perdus.
lines = (line.rstrip() for line in open(filename))
Que pensez-vous de cette approche?
with open(filename) as data:
datalines = (line.rstrip('\r\n') for line in data)
for line in datalines:
...do something awesome...
L'expression du générateur évite de charger le fichier entier en mémoire et with
assure la fermeture du fichier
for line in file('/tmp/foo'):
print line.strip('\n')
Il suffit d'utiliser des expressions de générateur:
blahblah = (l.rstrip() for l in open(filename))
for x in blahblah:
print x
De plus, je vous déconseille de lire tout le fichier dans la mémoire - le fait de boucler sur les générateurs est beaucoup plus efficace sur les grands ensembles de données.
Je l'utilise
def cleaned( aFile ):
for line in aFile:
yield line.strip()
Ensuite, je peux faire des choses comme ça.
lines = list( cleaned( open("file","r") ) )
Ou bien, je peux étendre le nettoyage avec des fonctions supplémentaires pour, par exemple, supprimer des lignes vierges ou ignorer des lignes de commentaire ou autre.
Je le ferais comme ça:
f = open('test.txt')
l = [l for l in f.readlines() if l.strip()]
f.close()
print l