[ Alef @ 18.01.2005. 20:39 ] @
Kako da upisujem u datoteku bajt po bajt, a da ne moram da petljam sa stringovima? Prekopao sam dokumentaciju i nikako ne uspevam da pronađem…

Znači, recimo:
Code:

    f = open("tmp.dat", "wb")
    i = 255
    f.ispis(i)
    f.close()

Code:

    # hexdump tmp.dat
    0000000 00FF
    0000001
[ toroman @ 23.03.2005. 21:15 ] @
Evo prostudiraj ovaj kod, nadam se da će ti pomoći

Code:

"""
Autor: Srećko Toroman, 
http://www.znalac.tk
"""

import StringIO         # za testiranje, virtuelni fajl

def byte(number, fileobj):
    """
        Ova funkcija zapisuje broj u ascii formatu. Dakle, ako hoces
        da zapises
          i=255
        Onda :
          f= file("tmp.dat","rb")
          byte(i,f)
          f.close()

        I to je to. Mozda ima neki bug... Uglavom mozes da zapises
        i vise byteova odjednom, kao sto je prikazano dole u primjeru
    """
    while number>0:
        b=number % 256;
        fileobj.write(chr(b))
        number/=256;

a=StringIO.StringIO()       # virtuelni fajl
byte(65,a)                  # upisuje ASCII A
a.write("TheLarch")         # normalno upisivanje stringa
byte(65+66*256,a)           # upisuje jos ASCII AB


a.seek(0)                   # postavlja na pocetak radi citanja
print a.read()




Uglavnom, nisam morao ovoliko da filozofiram, dovoljno bi bilo da sam ti rekao chr(i) :)
[ Alef @ 23.03.2005. 21:43 ] @
Pa ovo je upravo ono što sam nazvao „petljanje sa stringovima” . Tako sam otprilike i rešio stvar, samo mi je bilo čudno da ne postoji neka builtin varijanta C-ovog fread, fwrite. Listao dokumentaciju, google-ao… i ništa, pa reko mora da mi je promaklo, aj da pitam…
[ toroman @ 24.03.2005. 14:52 ] @
Ne razumem šta je tu "petljanje". Nema tu nikakvog petljanja. Ako insistiraš, pogledaj biblioteku struct.
[ Alef @ 25.03.2005. 00:44 ] @
Ne, nisi me shvatio… Znam ja za sve te varijante, samo se meni nije nikako svidela ideja da se u datoteku direktno mogu upisivati samo nizovi karaktera (to sam nazvao „petljancija sa stringovima”). A pošto je python jako tipiziran nema mešanja tipova int i char kao u C-u, na koji sam bio navikao… Pa sam mislio da mi je nešto promaklo…
[ toroman @ 25.03.2005. 16:40 ] @
Aj dobro, mislim da mi je jasno šta tačno hoćeš... Byte po byte. E pa, ako baš insistiraš, za takav posao, nije nikakva mudrost napisati python lib u C-u koji ima funkciju writebyte :) ali, ne preporučujem ti to, mislim, toga si i sam najvjerovatnije svjestan, ali opet razumijem te, tebe samo interesuje postoji li to ili ne, right? E pa, i da NAM je to promaklo, vjeruj mi, mislim da ne propuštamo mnogo :)

Pozdrav svim python programerima!
[ toroman @ 02.04.2005. 07:52 ] @
Osim toga, zašto bi neki visoko objektno orijentisan jezik kao python omogucavao, po srodstvu, assemblersku funkciju? Mislim, uopšte ne treba da nas čudi to. Po meni je to sasvim normalno (sad nakon što sam malo razmislio). Python je veoma razvijen jezik. fread i fwrite bili bi suvišni u jednom ovakvom jeziku... Valjda ... Poz.