web-dev-qa-db-fra.com

Meilleure méthode pour lire des fichiers délimités par une nouvelle ligne et rejeter les nouvelles lignes?

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?

82
solarce
lines = open(filename).read().splitlines()
190
Curt Hagenlocher

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))
23
TimoLinna

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

9
Paweł Prażak
for line in file('/tmp/foo'):
    print line.strip('\n')
8
David Z

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.

4
artyom

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.

3
S.Lott

Je le ferais comme ça:

f = open('test.txt')
l = [l for l in f.readlines() if l.strip()]
f.close()
print l
2
routerguy