Изменить символ новой строки .readline () ищет - PullRequest
6 голосов
/ 08 июня 2011

Можно ли изменить символ новой строки, который ищет метод .readline() при чтении строк?Мне может понадобиться прочитать поток из файлового объекта, который будет разделен чем-то отличным от перевода строки, и это может быть удобно для получения порции за раз.file объекты не имеют readuntil, который мне не пришлось бы создавать, если бы я мог использовать readline

РЕДАКТИРОВАТЬ:


Я еще не пробовал это на трубе, кроме stdin;но это похоже на работу.

class cfile(file):
    def __init__(self, *args):
        file.__init__(self, *args)

    def readuntil(self, char):
        buf = bytearray()
        while True:
            rchar = self.read(1)
            buf += rchar
            if rchar == char:
                return str(buf)

использование:

>>> import test
>>> tfile = test.cfile('/proc/self/fd/0', 'r')
>>> tfile.readuntil('0')
this line has no char zero
this one doesn't either,
this one does though, 0
"this line has no char zero\nthis one doesn't either,\nthis one does though, 0"
>>>

1 Ответ

6 голосов
/ 09 июня 2011

Нет.

Рассмотрите возможность создания генератора с использованием file.read() и получения фрагментов, ограниченных указанным символом.

Edit:

Образец, который вы предоставили, должен нормально работать. Я бы предпочел использовать генератор, хотя:

def chunks(file, delim='\n'):
    buf = bytearray(), 
    while True:
        c = self.read(1)
        if c == '': return
        buf += c
        if c == delim: 
            yield str(buf)
            buf = bytearray()
...