Groups | Search | Server Info | Login | Register


Groups > cz.comp.lang.python > #3439

Re: [python] Funkcia seek()

From Petr Viktorin <encukou@gmail.com>
Subject Re: [python] Funkcia seek()
Newsgroups cz.comp.lang.python
Message-ID <mailman.17.1638951773.25463.python@py.cz> (permalink)
References <2d9688db-6339-6b54-5e6f-d65567b834d0@gmail.com> <6c55f080-5ee2-526c-00e1-f424277c1f11@gmail.com>
Organization usenet-news.net
Date 2021-12-08 09:22 +0100

Show all headers | View raw


On 07. 12. 21 21:33, Dusan Gazo wrote:
> Zdravim.
> 
> Som začiatočník a skúšam možnosti jazyka.
> 
> Prečo pri otvorenom súbore v textovom móde, funkcia seek(x, y) je 
> funkčná len ak je y =  0 a x >= 0?  Pri Y = 1 alebo 2 môže byt x len 0.
> 
> Je na to nejaký dôvod?  Ak otvorim súbor binárne tak funkcia pracuje 
> tak, ako si predstavujem, t.j. Y = 0 -> x môže byť >= 0 ,
> 
> Y = 1 ->  x  môže byť < >= 0 , Y=2  x môže byť <=0.
> 

Do soouboru se neukladaji znaky, ale bajty. Text se da prevest 
(zakodovat) na bajty, bajty se daji dekodovat zpatky, ale problem je ze 
jeden znak muze byt zakodovany ruznym poctem bajtu:

 >>> len('a'.encode('utf-8'))
1
 >>> len('ů'.encode('utf-8'))
2
 >>> len('←'.encode('utf-8'))
3
 >>> len('😸'.encode('utf-8'))
4

Python nemuze operacnimu systemu rict "skoc o 400 znaku dal", jen napr. 
"skoc o 400 bajtu dal". Ale na to, aby spocital kolik bajtu tyhle znaky 
zaberou by je musel vechny nacist a zpracovat.

Mimochodem, pro Y=0 (whence=SEEK_SET) nemuze byt X jakekoli cislo, ale 
jen cislo ktere jsi predtim dostal pomoci metody tell(). S jinym cislem 
bys mohl "pristat" v pulce znaku, a kdo vi co by se delo pak...

Viz dokumentace: 
https://docs.python.org/3/library/io.html#io.TextIOBase.seek


Jestli chces skakat dopredu, muzes pouzit read() a dany pocet znaku 
nacist a zahodit. (Pozor, cti dokumentaci: read() muze vatit kratsi 
retezec nez o jaky si reknes.)
Jestli chces skakat na pozici kde jsi uz byl, zapamatuj si ji pomoci tell().
A nebo otevri soubor v binarnim modu a dekodovani na text res sam.

Back to cz.comp.lang.python | Previous | Next | Find similar


Thread

Re: [python] Funkcia seek() Petr Viktorin <encukou@gmail.com> - 2021-12-08 09:22 +0100

csiph-web