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/.





Bicycle repairman






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





Bicycle repairman






Dzięki. W sumie działa, ale dane dostępne są w postaci skompresowanej, dla mnie nie przydatnej.
Offline



Administrator





Bicycle repairman






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



Administrator




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





Bicycle repairman






Rozwiązałem to przez rozpakowanie pliku do pliku tymczasowego. Dzięki za uwagi.
Offline