Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 19, 2013 13:17:46

Michail_V
Зарегистрирован: 2013-06-19
Сообщения: 13
Репутация: +  -1  -
Профиль   Отправить e-mail  

...

Отредактировано Michail_V (Июнь 20, 2013 15:00:02)

Офлайн

#2 Июнь 19, 2013 13:27:22

agalen
От:
Зарегистрирован: 2011-03-23
Сообщения: 185
Репутация: +  17  -
Профиль   Отправить e-mail  

...

import mmap
with open("data.bin", "r+") as f:
    m = mmap.mmap(f.fileno(), 0)
    pos = m.rfind( "\n" )



Офлайн

#3 Июнь 19, 2013 13:45:35

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

...

Используйте file.seek и, скорее всего, бинарный режим доступа.

Офлайн

#4 Июнь 19, 2013 14:34:31

Michail_V
Зарегистрирован: 2013-06-19
Сообщения: 13
Репутация: +  -1  -
Профиль   Отправить e-mail  

...

Отредактировано Michail_V (Июнь 20, 2013 14:24:51)

Офлайн

#5 Июнь 19, 2013 20:43:38

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

...

Michail_V
всё-равно выжирает оперативу
Так вы приведите свой код.



Офлайн

#6 Июнь 19, 2013 20:53:10

Michail_V
Зарегистрирован: 2013-06-19
Сообщения: 13
Репутация: +  -1  -
Профиль   Отправить e-mail  

...

Отредактировано Michail_V (Июнь 20, 2013 14:25:03)

Офлайн

#7 Июнь 19, 2013 21:02:53

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

...

Michail_V
насколько я понимаю
Научите каким образом вы это так понимаете. http://docs.python.org/2/library/mmap.html
Команда
f=open("some_file.dat","r")
ведь не читает файл.



Отредактировано doza_and (Июнь 19, 2013 21:05:36)

Офлайн

#8 Июнь 20, 2013 14:43:20

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

...

def reverse_readlines(path, BLOCK_SIZE=4096):
    with open(path, "rb") as f:
        bfr = b""
        f.seek(-1, 2)
        while True:
            pos = f.tell()
            newline_pos = bfr.rfind(b"\n")
            while -1 != newline_pos:
                line, bfr = bfr[newline_pos+1:], bfr[:newline_pos]
                yield line
                newline_pos = bfr.rfind(b"\n")
            else:
                if pos:
                    toread = min(BLOCK_SIZE, pos)
                    f.seek(-toread, 1)
                    bfr = f.read(toread) + bfr
                    f.seek(-toread, 1)
                    if pos == toread:
                        bfr = b"\n" + bfr
                else:
                    raise StopIteration()



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version