Форум сайта python.su
Не осудите но итераторами пробую пользоваться только сейчас.
Конструирую генератор для построчного чтения лог файла с возможностью контролировать позицию чтения с лога:
class LogParser: def __init__(self, file_name): self.log_file = open(file_name) self.where = 0L def iter_line(self): while True: self.where = self.log_file.tell() raw_line = self.log_file.readline() if raw_line: yield raw_line else: raise StopIteration
parser = LogParser('some.log') for line in parser.iter_line(): print parser.where, ' ', line
log_file = open(file_name) for line in log_file.xreadlines(): print log_file.tell(), ' ', line
Отредактировано agryn (Май 31, 2013 17:03:34)
Офлайн
Попробуйте так:
class LogParser: def __init__(self, file_name): self.file_name = file_name self.where = 0L def iter_line(self): with open(self.file_name, "rt", encoding="utf-8") as f: for line in iter(f.readline, None): yield line self.where = f.tell()
Отредактировано pyuser (Июнь 1, 2013 05:05:40)
Офлайн
class LogParser: def __init__(self, file_name): self.log_file = open(file_name) self.where = 0L def iter_line(self): while True: self.where = self.log_file.tell() raw_line = self.log_file.readline() if raw_line: yield raw_line else: break
>>> lp = LogParser('/etc/passwd') >>> for line in lp.iter_line(): ... print line, lp.where ... root:x:0:0:root:/root:/bin/bash 0 bin:x:1:1:bin:/bin:/sbin/nologin 32 daemon:x:2:2:daemon:/sbin:/sbin/nologin 65 ...
Отредактировано py.user.next (Июнь 1, 2013 09:39:11)
Офлайн
py.user.nextКажется я этот вариант также пробовал но был в затмении. Спасибо все сработало!class LogParser: def __init__(self, file_name): self.log_file = open(file_name) self.where = 0L def iter_line(self): while True: self.where = self.log_file.tell() raw_line = self.log_file.readline() if raw_line: yield raw_line else: break
Отредактировано agryn (Июнь 1, 2013 11:11:39)
Офлайн