Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 3, 2013 10:36:13

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9730
Репутация: +  843  -
Профиль   Отправить e-mail  

работа с текстовым файлом

solomon243
Думал об этом. Но может каким- то образом итераторы использовать?
каким ? для доступа к последнему элементу итератора надо прочитать все предыдущие

#!/usr/bin/env python3
 
# выводит n строк с конца файла
 
import io
 
def reverse_file(fin):
    fin.seek(0, io.SEEK_END)
    pos = fin.tell()
    while pos > 0:
        pos -= 1
        fin.seek(pos, io.SEEK_SET)
        yield fin.read(1)
 
def tail(fname, maxn):
    assert maxn > 0
    n = 0
    lst = []
    with open(fname, encoding='utf-8') as fin:
        for c in reverse_file(fin):
            if c == '\n':
                n += 1
            if n > maxn:
                break
            lst.append(c)
    s = ''.join(reversed(lst))
    return s
 
print(tail('/etc/passwd', 3), end='')
[guest@localhost py]$ ./rev.py
pulse:x:993:993:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
guest:x:1000:1000:guest:/home/guest:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
[guest@localhost py]$

add
по документации (.seek() и .tell()) .tell() может не возвращать число байт или символов
но для чего используется .tell()? для сохранения текущей позиции, чтобы к ней можно было вернуться
позиция в текстовом файле определяется символом
dip3



Отредактировано py.user.next (Авг. 3, 2013 18:58:50)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version