🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.python
1 messages
1 total messages Started by Daniel Mróz Mon, 01 Feb 2010 13:13
Re: podział wczytanego pliku na bloki zadanej wielkości
#27284
Author: 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+                           ]
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads