Path: csiph.com!weretis.net!feeder8.news.weretis.net!feeder1.feed.usenet.farm!feed.usenet.farm!newsfeed.xs4all.nl!newsfeed8.news.xs4all.nl!news-out.netnews.com!news.alt.net!fdc2.netnews.com!peer03.ams1!peer.ams1.xlned.com!news.xlned.com!peer02.ams4!peer.am4.highwinds-media.com!news.highwinds-media.com!fx02.ams4.POSTED!not-for-mail Received-SPF: none (Address does not pass the Sender Policy Framework) SPF=HELO; sender=mail-wm1-f46.google.com; remoteip=::ffff:209.85.128.46; remotehost=; helo=mail-wm1-f46.google.com; receiver=hugo.zagamma.cz; Received-SPF: pass (Address passes the Sender Policy Framework) SPF=MAILFROM; sender=encukou@gmail.com; remoteip=::ffff:209.85.128.46; remotehost=; helo=mail-wm1-f46.google.com; receiver=hugo.zagamma.cz; DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=message-id:date:mime-version:user-agent:subject:content-language:to :references:from:cc:in-reply-to:content-transfer-encoding; bh=nsO4Z+XxKAN561i/B2I511bj91zm1Rt0UU0YpvXonGI=; b=Atd/KKelB88W6nM88eBG3/H4uiDCc5E7qgQqhjWvTbscquzo7CbmfId+ydAwjNbBMI 5ryK/sph2kOKc1kkRcIasglXapfeoL8jBeV8EIaucOsyW+dJIJ1cN/3sw5FHjlzfqsZ1 WLd1XG133isD2w+5Ftoo4lIIgV2YdI+00DOaS4mVpUFdJLASEqsOw/Qe0Ye29EUcVneJ d0T0hf5tGbh7Uf1uFJ6iLog8VlY3Dyd5iNgfWr5EnEkqJKISRnhbATlhYuvgp8o7ExUQ T/vyf/41Mf/gjrJchz2LQ6tYAKC7r7VhDOwUiQanbnCZpLyHwrL8dqQQLxg80RS/FT4W JPuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:references:from:cc:in-reply-to :content-transfer-encoding; bh=nsO4Z+XxKAN561i/B2I511bj91zm1Rt0UU0YpvXonGI=; b=G3i++Ogl/tCwrIVHyIQIDygcLEureneMIELKDsyse/CGpjjMPhD5skS0IPlJzCo+ET QVUgtX0Sa8FF5CYy6pfDw3NExMbRcT2vCTTeF49pRPtktJ7GntTTePVNua58DBpoKX7V W1REc/ErvtuTcAVdqvk9qAlrGZVY2phj+3HaZs4gu9ZQuckZFgak8pFguFa6rixkrcUG J7pJV0qrLjLZlT8PLTg9GGvGl8WmryWwaRIQtjqIxYhxAg2HjLVC1eDN4qhAHnerKA8C hEQ2QeyL1KP7RN7mCYFi5HMadmVxiTTdoCCePcFP5BHmT0+9M41+WL6RE+0nFBhqEHdC AkIA== X-Gm-Message-State: AOAM533l6zyKOyYfvR++yBW0ssghCfKOM3O9C94ruR7Ty4DYBQjzXCKV Ca3S0QJ4jGC1Qa/LqrxTGPM= X-Google-Smtp-Source: ABdhPJyz9FZ0xL6FOf7mm4VHDyIjRtCim1v0qVYgBasmMx6oEK56GKcfL5TcLwFpIJM0umIntulHCQ== X-Received: by 2002:a05:600c:1c20:: with SMTP id j32mr13893845wms.1.1638951770077; Wed, 08 Dec 2021 00:22:50 -0800 (PST) Old-Return-Path: MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.3.0 Content-Language: en-US From: Petr Viktorin In-Reply-To: <2d9688db-6339-6b54-5e6f-d65567b834d0@gmail.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Subject: Re: [python] Funkcia seek() X-BeenThere: python@py.cz X-Mailman-Version: 2.1.34 Precedence: list List-Id: Konference PyCZ List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: cz.comp.lang.python Message-ID: X-Mailman-Original-Message-ID: <6c55f080-5ee2-526c-00e1-f424277c1f11@gmail.com> X-Mailman-Original-References: <2d9688db-6339-6b54-5e6f-d65567b834d0@gmail.com> References: <2d9688db-6339-6b54-5e6f-d65567b834d0@gmail.com> <6c55f080-5ee2-526c-00e1-f424277c1f11@gmail.com> Lines: 44 X-Complaints-To: abuse@usenet-news.net NNTP-Posting-Date: Wed, 08 Dec 2021 08:22:54 UTC Organization: usenet-news.net Date: Wed, 8 Dec 2021 09:22:48 +0100 X-Received-Bytes: 5255 Xref: csiph.com cz.comp.lang.python:3439 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.