Frage Die beste Methode zum Lesen von durch Zeilenbegrenzung getrennten Dateien in Python und zum Verwerfen der Zeilenumbrüche?


Ich versuche den besten Weg zu finden, Newline-Zeilen loszuwerden, wenn ich in Newline-getrennte Dateien in Python einlese.

Was ich mir ausgedacht habe, ist der folgende Code, der den Wegwerfcode zum Testen enthält.

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

Vorschläge?


75
2018-02-13 06:31


Ursprung


Antworten:


lines = open(filename).read().splitlines()

179
2018-02-13 06:35



Hier ist ein Generator, der das tut, was Sie angefordert haben. In diesem Fall ist die Verwendung von rstrip ausreichend und etwas schneller als Strip.

lines = (line.rstrip('\n') for line in open(filename))

Am ehesten möchten Sie dies jedoch verwenden, um auch nachfolgende Leerzeichen zu entfernen.

lines = (line.rstrip() for line in open(filename))

20
2018-02-13 08:35



for line in file('/tmp/foo'):
    print line.strip('\n')

8
2018-02-13 06:36



Was denkst du über diesen Ansatz?

with open(filename) as data:
    datalines = (line.rstrip('\r\n') for line in data)
    for line in datalines:
        ...do something awesome...

Generatorausdruck verhindert das Laden der gesamten Datei in den Speicher und with sorgt dafür, dass die Datei geschlossen wird


8
2017-08-08 07:26



Verwenden Sie einfach Generatorausdrücke:

blahblah = (l.rstrip() for l in open(filename))
for x in blahblah:
    print x

Ich möchte Sie auch davon abraten, ganze Dateien im Speicher zu lesen - das Schleifen von Generatoren ist bei großen Datensätzen viel effizienter.


4
2018-02-14 07:43



ich benutze das

def cleaned( aFile ):
    for line in aFile:
        yield line.strip()

Dann kann ich solche Dinge tun.

lines = list( cleaned( open("file","r") ) )

Oder, ich kann mit zusätzlichen Funktionen gereinigt, um zum Beispiel leere Zeilen zu löschen oder Kommentarzeilen oder was auch immer zu überspringen.


3
2018-02-13 11:07



Ich würde es so machen:

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

2
2018-02-13 06:43