J'essaie de déterminer la meilleure façon de gérer la suppression des nouvelles lignes lors de la lecture de fichiers délimités par les nouvelles lignes en Python.
Ce que j'ai trouvé est le code suivant, incluez du code jetable à 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?
Réponses:
la source
Voici un générateur qui fait ce que vous avez demandé. Dans ce cas, l'utilisation de rstrip est suffisante et légèrement plus rapide que la bande.
lines = (line.rstrip('\n') for line in open(filename))
Cependant, vous voudrez probablement l'utiliser pour vous débarrasser également des espaces de fin.
lines = (line.rstrip() for line in open(filename))
la source
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 tout le fichier en mémoire et
with
assure la fermeture du fichierla source
for line in file('/tmp/foo'): print line.strip('\n')
la source
Utilisez simplement des expressions génératrices:
blahblah = (l.rstrip() for l in open(filename)) for x in blahblah: print x
Je tiens également à vous déconseiller de lire le fichier entier en mémoire - le bouclage sur des générateurs est beaucoup plus efficace sur de grands ensembles de données.
la source
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, je peux étendre nettoyé avec des fonctions supplémentaires pour, par exemple, supprimer des lignes vides ou sauter des lignes de commentaire ou autre.
la source
Je le ferais comme ceci:
f = open('test.txt') l = [l for l in f.readlines() if l.strip()] f.close() print l
la source
... if l.strip() is not ''
, ce dont j'ai besoin dans mon cas.