Лучший метод для чтения файлов с разделителями новой строки и удаления новых строк? - PullRequest
82 голосов
/ 13 февраля 2009

Я пытаюсь определить лучший способ избавиться от новых строк при чтении файлов с разделителями новой строки в Python.

Я придумал следующий код, включающий одноразовый код для проверки.

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

Предложения

Ответы [ 7 ]

190 голосов
/ 13 февраля 2009
lines = open(filename).read().splitlines()
23 голосов
/ 13 февраля 2009

Вот генератор, который делает то, что вы просили. В этом случае достаточно использовать rstrip и немного быстрее, чем strip.

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

Однако вы, скорее всего, захотите использовать это, чтобы избавиться и от конечных пробелов.

lines = (line.rstrip() for line in open(filename))
9 голосов
/ 08 августа 2011

Что вы думаете об этом подходе?

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

Выражение генератора позволяет избежать загрузки всего файла в память, а with обеспечивает закрытие файла

8 голосов
/ 13 февраля 2009
for line in file('/tmp/foo'):
    print line.strip('\n')
4 голосов
/ 14 февраля 2009

Просто используйте выражения генератора:

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

Кроме того, я хочу посоветовать вам не читать весь файл в памяти - зацикливание на генераторах намного более эффективно для больших наборов данных.

3 голосов
/ 13 февраля 2009

Я использую это

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

Тогда я могу делать такие вещи.

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

Или я могу расширить очищенные с помощью дополнительных функций, например, удалить пустые строки или пропустить строки комментариев или что-то еще.

2 голосов
/ 13 февраля 2009

Я бы сделал это так:

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