Article View: pl.comp.lang.python
Article #27284Re: podział wczytanego pliku na bloki zadanej wielkości
From: Daniel Mróz
Date: Mon, 01 Feb 2010 13:13
Date: Mon, 01 Feb 2010 13:13
62 lines
3133 bytes
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-mailShow 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