Pertanyaan Metode terbaik untuk membaca file yang dibatasi newline dengan Python dan membuang baris baru?


Saya mencoba menentukan cara terbaik untuk mengatasi penghapusan baris baru saat membaca di file yang dibatasi baris baru dengan Python.

Apa yang saya dapatkan adalah kode berikut, termasuk kode yang dibuang untuk diuji.

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

Saran?


75
2018-02-13 06:31


asal


Jawaban:


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

179
2018-02-13 06:35



Inilah generator yang melakukan apa yang Anda minta. Dalam hal ini, menggunakan rstrip cukup dan sedikit lebih cepat daripada strip.

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

Namun, Anda kemungkinan besar ingin menggunakan ini untuk menyingkirkan spasi putih juga.

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



Apa pendapat Anda tentang pendekatan ini?

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

Ekspresi Generator menghindari pemuatan seluruh file ke dalam memori dan with memastikan menutup file


8
2017-08-08 07:26



Cukup gunakan ekspresi generator:

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

Saya juga ingin menyarankan Anda untuk tidak membaca seluruh file dalam memori - mengulang generator jauh lebih efisien pada dataset besar.


4
2018-02-14 07:43



Saya menggunakan ini

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

Maka saya bisa melakukan hal-hal seperti ini.

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

Atau, saya dapat memperpanjang dibersihkan dengan fungsi tambahan untuk, misalnya, menjatuhkan garis kosong atau melewati baris komentar atau apa pun.


3
2018-02-13 11:07



Saya akan melakukannya seperti ini:

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

2
2018-02-13 06:43