Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Mam taki problem:
otwieram sobie plik:
>>> import gzip
>>> b = gzip.open('error.log.13.gz')
>>> b.seek(-2,2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: seek() takes exactly 2 arguments (3 given)
Czy przy pliku typu 'gzip' można sobie jakoś ustawić pozycję w pliku względem końca?
Przy normalnym pliku wszystko działa.
Offline
Może tak: b.fileobj.seek(-2, 2)
Pozdrawiam
Offline
Dzięki. W sumie działa, ale dane dostępne są w postaci skompresowanej, dla mnie nie przydatnej.
Offline
Mój problem jest trochę inny. Napisałem sobie funkcję ale ze zgiezipowanym plikiem to nie przechodzi.
def read_file_last_line(file_object):#{{{ """Return last line from a text file. Gets file object as parametr""" i = -1 while file_object.read(1) != 'n': i = i - 1 file_object.seek(i,2) line = file_object.readline() return line #}}}
Dokumentacja niestety jest trochę nieścisła.
Jedyna sensowna rzecz jaka mi przychodzi do głowy to przelecenie całego pliku do ostatniej linii albo zrobienie operacji na tymczasowo rozpakowanym pliku. Pytanie co z punktu widzenia zużycia zasobów jest korzystniejsze? A może jakieś inne pomysły?
Offline
Masz tu fajne przykłady:
http://pleac.sourceforge.net/pleac_python/filecontents.html
- w tym zbiorku coś jest o czytaniu linii z pliku, jak zczytać łatwo ostatnią
http://pleac.sourceforge.net/pleac_python/fileaccess.html
- tutaj cos o tworzeniu plików tymczasowych widze, bo nie wyobrażam sobie przeczytania pliku bez rozpakowania, może by tak stworzyć plik tymczasowy, ewentualnie rozpakowac do stringa i poszukać ostatniego znaku nowej linii albo coś
Offline
Rozwiązałem to przez rozpakowanie pliku do pliku tymczasowego. Dzięki za uwagi.
Offline