Operacje na =?UTF-8?B?cGFtacSZY2k=?=
Daniel =?UTF-8?B?TXLDs3o=?= - 15-08-2007 00:01
Operacje na =?UTF-8?B?cGFtacSZY2k=?=
Cześć
Czy znacie jakiś sposób, aby w Pythonie zaalokować obszar pamięci o pewnej wielkości i operować na nim jak na obiekcie plikowym (metody read(), write(), seek() itp)?
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+ ]
Adam Mikuta - 15-08-2007 00:01
Dnia 14.08.2007 Daniel Mróz <beorn@alpha.pl> napisał/a:
> Czy znacie jakiś sposób, aby w Pythonie zaalokować obszar pamięci o pewnej > wielkości i operować na nim jak na obiekcie plikowym (metody read(), > write(), seek() itp)?
cStringIO będzie dobre? -- Adam "Prawda jest prosta - gdyby było inaczej każdy głupiec mógłby ją zrozumieć".
Daniel =?UTF-8?B?TXLDs3o=?= - 15-08-2007 00:01
Adam Mikuta wrote: >> Czy znacie jakiś sposób, aby w Pythonie zaalokować obszar pamięci o >> pewnej wielkości i operować na nim jak na obiekcie plikowym (metody >> read(), write(), seek() itp)? > cStringIO będzie dobre? Coś podobnego do (c)StringIO. Te moduły operują raczej na ciągach znaków unikodowych, a ja chcę zapisywać dane binarne (structem).
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+ ]
Rob Wolfe - 15-08-2007 00:01
Daniel Mróz <beorn@alpha.pl> writes:
> Adam Mikuta wrote: >>> Czy znacie jakiś sposób, aby w Pythonie zaalokować obszar pamięci o >>> pewnej wielkości i operować na nim jak na obiekcie plikowym (metody >>> read(), write(), seek() itp)? >> cStringIO będzie dobre? > Coś podobnego do (c)StringIO. Te moduły operują raczej na ciągach znaków > unikodowych, a ja chcę zapisywać dane binarne (structem).
Takie dylematy będziesz mógł mieć dopiero w Pythonie 3k. :) Póki co StringIO akceptuje i unikod i 8-bitowe stringi. Binarne dane można zapisywać bez problemu.
Ale skoro potrzebujesz jakiś ograniczony obszar to może `mmap` się nada.
RW
Filip Wasilewski - 15-08-2007 00:01
=?iso-8859-2?q?Re:_Operacje_na_pami=EAci?=
On 14 Sie, 18:50, Daniel Mróz <be...@alpha.pl> wrote: > Adam Mikuta wrote: > >> Czy znacie jakiś sposób, aby w Pythonie zaalokować obszar pamięci o > >> pewnej wielkości i operować na nim jak na obiekcie plikowym (metody > >> read(), write(), seek() itp)? > > cStringIO będzie dobre? > > Coś podobnego do (c)StringIO. Te moduły operują raczej na ciągachznaków > unikodowych, a ja chcę zapisywać dane binarne (structem).
Nie widze problemu? StringIO zachowuje sie dokladnie jak plik binarny:
>>> import struct >>> from cStringIO import StringIO >>> f = StringIO() >>> f.write(struct.pack(">lh", 1, 2)) >>> f.getvalue() '\x00\x00\x00\x01\x00\x02'
fw
Daniel =?UTF-8?B?TXLDs3o=?= - 15-08-2007 00:01
Filip Wasilewski wrote: >> >> Czy znacie jakiś sposób, aby w Pythonie zaalokować obszar pamięci o >> >> pewnej wielkości i operować na nim jak na obiekcie plikowym (metody >> >> read(), write(), seek() itp)? >> > cStringIO będzie dobre? >> Coś podobnego do (c)StringIO. Te moduły operują raczej na ciągach znaków >> unikodowych, a ja chcę zapisywać dane binarne (structem). > Nie widze problemu? StringIO zachowuje sie dokladnie jak plik binarny: Hmmm... OK, w takim razie się nada :)
Dziękuję i 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+ ]
Daniel =?UTF-8?B?TXLDs3o=?= - 15-08-2007 00:01
Rob Wolfe wrote: >>>> Czy znacie jakiś sposób, aby w Pythonie zaalokować obszar pamięci o >>>> pewnej wielkości i operować na nim jak na obiekcie plikowym (metody >>>> read(), write(), seek() itp)? >>> cStringIO będzie dobre? >> Coś podobnego do (c)StringIO. Te moduły operują raczej na ciągach znaków >> unikodowych, a ja chcę zapisywać dane binarne (structem). > Takie dylematy będziesz mógł mieć dopiero w Pythonie 3k. :) > Póki co StringIO akceptuje i unikod i 8-bitowe stringi. > Binarne dane można zapisywać bez problemu. > > Ale skoro potrzebujesz jakiś ograniczony obszar to może `mmap` się nada. Myślałem nad tym, jednakże o ile dobrze rozumiem dokumentację, do mmap muszę przekazać deskryptor istniejącego, fizycznego pliku. U mnie zawartość obszaru pamięci nie będzie dokładnym odzwierciedleniem pliku, a nawet poprzez "doklejanie" kolejnych obszarów będzie się rozszerzała, a synchronizacja będzie wprowadzała zmiany w danych (konkretnie to odrzucała informacje, które w pliku są niepotrzebne - dirty blocki).
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+ ]
Adam Mikuta - 15-08-2007 00:01
Dnia 14.08.2007 Rob Wolfe <rw@smsnet.pl> napisał/a:
> Takie dylematy będziesz mógł mieć dopiero w Pythonie 3k. :) > Póki co StringIO akceptuje i unikod i 8-bitowe stringi. > Binarne dane można zapisywać bez problemu.
Jak już tak o tym 3k... co się zmieni pod tym względem? -- Adam "Prawda jest prosta - gdyby było inaczej każdy głupiec mógłby ją zrozumieć".
Bart Ogryczak - 15-08-2007 00:01
=?iso-8859-2?q?Re:_Operacje_na_pami=EAci?=
On 14 ago, 17:46, Daniel Mróz <be...@alpha.pl> wrote: > Cześć > > Czy znacie jakiś sposób, aby w Pythonie zaalokować obszar pamięcio pewnej > wielkości i operować na nim jak na obiekcie plikowym (metody read(), > write(), seek() itp)?
Modul mmap
Rob Wolfe - 16-08-2007 00:01
Daniel Mróz <beorn@alpha.pl> writes:
> Rob Wolfe wrote: >>>>> Czy znacie jakiś sposób, aby w Pythonie zaalokować obszar pamięci o >>>>> pewnej wielkości i operować na nim jak na obiekcie plikowym (metody >>>>> read(), write(), seek() itp)? >>>> cStringIO będzie dobre? >>> Coś podobnego do (c)StringIO. Te moduły operują raczej na ciągach znaków >>> unikodowych, a ja chcę zapisywać dane binarne (structem). >> Takie dylematy będziesz mógł mieć dopiero w Pythonie 3k. :) >> Póki co StringIO akceptuje i unikod i 8-bitowe stringi. >> Binarne dane można zapisywać bez problemu. >> >> Ale skoro potrzebujesz jakiś ograniczony obszar to może `mmap` się nada. > Myślałem nad tym, jednakże o ile dobrze rozumiem dokumentację, do mmap muszę > przekazać deskryptor istniejącego, fizycznego pliku. U mnie zawartość
Zgadza się.
> obszaru pamięci nie będzie dokładnym odzwierciedleniem pliku, a nawet > poprzez "doklejanie" kolejnych obszarów będzie się rozszerzała, a > synchronizacja będzie wprowadzała zmiany w danych (konkretnie to odrzucała > informacje, które w pliku są niepotrzebne - dirty blocki).
Czyli pozostaje StringIO.
RW
Rob Wolfe - 16-08-2007 00:01
Adam Mikuta <adammikutaWytnij@gmail.wyt.nij.com> writes:
> Dnia 14.08.2007 Rob Wolfe <rw@smsnet.pl> napisał/a: > >> Takie dylematy będziesz mógł mieć dopiero w Pythonie 3k. :) >> Póki co StringIO akceptuje i unikod i 8-bitowe stringi. >> Binarne dane można zapisywać bez problemu. > > Jak już tak o tym 3k... co się zmieni pod tym względem?
Nastąpi wyraźne rozróżnienie między ciągami znaków, a ciągami bajtów (model znany np. z javy). Wszystkie stringi w Pythonie 3.0 będą zawierały tylko znaki unikodowe. Dla danych binarnych powstanie nowy mutowalny typ `bytes`. W związku z tym odczytanie danych binarnych z pliku (tryb 'rb') spowoduje utworzenie obiektu `bytes`, a nie `str`, jak również nie będzie możliwe bezpośrednie zapisanie stringu do pliku binarnego (tryb 'wb'). Analogicznie buforami w pamięci będą odpowiednio dla stringów StringIO (tylko unikod) i BytesIO (dane binarne). Po szczegóły odsyłam tutaj:
http://www.artima.com/weblogs/viewpo...?thread=208549 http://www.python.org/dev/peps/pep-0358/ http://www.python.org/dev/peps/pep-3116/
RW
Adam Mikuta - 16-08-2007 00:01
Dnia 15.08.2007 Rob Wolfe <rw@smsnet.pl> napisał/a:
> (...)
Dzięki za rozjaśnienie :) -- Adam "Prawda jest prosta - gdyby było inaczej każdy głupiec mógłby ją zrozumieć".
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[mysql] (4.1 lub nowszy) pobieranie =?UTF-8?Q?rekord=C3=B3w?="minimalnych"
problem z kodowaniem UTF-8 przy robieniu kopii zapasowej
mysqldump i kodowanie utf-8 (brak polskich znakow)
Poziome, pionowe paski lub siatka - jak =?UTF-8?B?enJvYmnEhz8g?=
=?iso-8859-2?q?utf-8_i_problem_z_z=B3?=
[postgresql] jdbc i =?UTF-8?B?d3lqxIV0a2k=?= z bazy
mysql, utf-8 i blednie wyciagane znaki
[MSSQL2000] Jak wyeksportować .txt w formacie UTF-8??
phpSolutions - szewc bez =?UTF-8?B?YnV0w7N3?=
[MySQL] REGEXP =?UTF-8?B?ZG9rxYJhZG5pZSBkd2Egem5ha2k=?=
zanotowane.pldoc.pisz.plpdf.pisz.pltejsza.htw.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|