🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.python
Article #27284

Re: podział wczytanego pliku na bloki zadanej wielkości

#27284
From: Daniel Mróz
Date: Mon, 01 Feb 2010 13:13
62 lines
3133 bytes
On 28.01.2010, Morfi <jarek.damian@gmail.com> wrote:
> Zastanawiam się teraz nad poprawnością mojego myślenia.
Jest błędne.

> Chodzi o to, iż mam załadować dwa różne pliki bit po bicie, podzielić
> je na bloki i wykonywać operacje artymetyczne...
>
> Właśnie jednak sobie uświadomiłem, iż :
>
><plik>
> jakistekst
></plik>
>
>
> a =open(plik, 'rb')
> b =a.read()
>
> print b
>
> zwraca nam literał czyli:
>
>>> jakistekst
>
> zamiast ciągu bitów w stylu 0b001010.... lub chociaż str w stylu:
> '001010...'
file.read() odczytuje *bajty*, nie bity. Bajt jest najmniejszą porcją danych,
jaką możesz wyciągnąć przy użyciu metody read(). Bajt to 8 bitów.

read(1) odczyta Ci 1 bajt
read(4) odczyta Ci 4 bajty
read(0.5) wywali Ci błąd (chyba...)
read() odczyta Ci wszystkie bajty z pliku.

Dane odczytane z pliku są znakami lub ciągami znaków. Jeśli chcesz odczytać
wartości liczbowe (ale nie ciągi zer i jedynek!) musisz wiedzieć jakiego typu
ma to być wartość (byte, ubyte, int, uint, long, ...). Musisz jeszcze
wiedzieć czy dane w pliku są zapisane jako Little Endian czy Big Endian. Da
Ci to informację na ilu bajtach ta wartość jest zapisana. Jak będziesz już to
wiedział, odczytujesz odpowiednią ilość danych z pliku i przeciągasz to przez
struct.unpack() aby uzyskać wartość liczbową (ale nie ciąg zer i jedynek!).

> Teraz zastanawiam się, jak z tego wybrnąć. Czyżbym musiał czytać to po
> znaku i korzystać z binascii. Jednak binascii nie ogarniam... ponieważ
> zgodnie z dokumentacją mogę sobie wybrać, jak binascii ma konwertować
> dane:
Tak, musisz każdy odczytany bajt zamienić na... nie wiem co potrzebujesz.
Ciąg znaków '1' i '0'? Tablicę ośmiu wartości 1 i 0? Nie rozumiem jednak
po co Ci to. Jeśli chcesz się bawić w przesuwanie bitów, to robi się to
w zupełnie inny sposób.

Za dużo django, za mało podstaw programowania i zasad działania systemów
komputerowych.


Pozdrawiam
Beorn

-- 
Daniel 'Beorn' Mróz <beorn@alpha.pl>    http://127.0.0.1/beorn
[GIT d s:- a-@ C++++ UL++++$ P+ L++++ E--- W+ N+++ o? K- w---]
[O- M- V!  PS+ PE++ Y+ PGP++ t- 5  X R !tv b+ DI D++ G++ e h*]
[                          r++  y+                           ]
Technical Details
Message-ID: <slrnhmdl02.rk0.beorn@pino.cyberdeck.pl>
Path: mbox-mo1.pugleaf.net!border1.nntp.dca.giganews.com!nntp.giganews.com!goblin2!goblin.stu.neva.ru!newsfeed.atman.pl!not-for-mail

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!border1.nntp.dca.giganews.com!nntp.giganews.com!goblin2!goblin.stu.neva.ru!newsfeed.atman.pl!not-for-mail
From: Daniel Mróz <beorn@alpha.pl>
Newsgroups: pl.comp.lang.python
Subject: Re: podział wczytanego pliku na bloki zadanej
 wielkości
Date: Mon, 1 Feb 2010 13:13:22 +0000 (UTC)
Organization: A tak se walimy młotkami d:-/
Lines: 62
Message-ID: <slrnhmdl02.rk0.beorn@pino.cyberdeck.pl>
NNTP-Posting-Host: fw2.itvp.pl
Mime-Version: 1.0
X-Trace: node1.news.atman.pl 1265030002 31079 217.17.39.4 (1 Feb 2010 13:13:22 GMT)
X-Complaints-To: usenet@atman.pl
NNTP-Posting-Date: Mon, 1 Feb 2010 13:13:22 +0000 (UTC)
User-Agent: slrn/0.9.8.1pl2.1 (Linux)
Bytes: 3158
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit