4
\$\begingroup\$

I wrote a python function that writes a integer to a file in binary form. But are there any ways that I can reduce the number of steps, is there a more efficient way to write a integer to a file?

def IntWrite(FileName, Integer):
    #convert to hexadecimal
    data = str('{0:0x}'.format(Integer))
    #pad number if odd length
    if(len(data) % 2 != 0):
        data="0"+data
    #split into chucks of two
    info = [data[i:i+2] for i in range(0, len(data), 2)]
    #convert each chuck to a byte
    data2 = "".join([chr(int(a, 16)) for a in info])
    #write to file
    file(FileName, "wb").write(data2)


#convert back to integer
def IntRead(FileName):
    RawData = file(FileName, "rb").read()
    HexData = "".join(['{0:0x}'.format(ord(b)) for b in RawData])
    return int(HexData, 16)


IntWrite("int_data.txt", 100000)
print IntRead("int_data.txt")
\$\endgroup\$
  • 2
    \$\begingroup\$ This is more of a SO question. See struct.pack, struct.unpack, in this case with a format character of i or I, unless you need more than 32 bits. \$\endgroup\$ – Michael Urman Nov 13 '13 at 3:02
  • \$\begingroup\$ … but it's also acceptable as a Code Review question. \$\endgroup\$ – 200_success Nov 13 '13 at 5:58
  • \$\begingroup\$ Sure, especially if there is a need to handle arbitrarily large integers, which the original code seems to offer. Otherwise the best code is that which you don't have to write. :) \$\endgroup\$ – Michael Urman Nov 13 '13 at 13:16
2
\$\begingroup\$

Python comes with a built-in pickle module for serialization:

>>> import pickle
>>> with open('data', 'wb') as f: pickle.dump(9 ** 33, f)
>>> with open('data', 'rb') as f: print(pickle.load(f))
30903154382632612361920641803529

(P.S. I wouldn't use a filename ending with .txt to store binary data.)

\$\endgroup\$
  • 1
    \$\begingroup\$ Note that pickle's binary format is incompatible with the original question. \$\endgroup\$ – 200_success Nov 13 '13 at 15:51
  • \$\begingroup\$ Yes, that's right: I'm assuming here that the OP is starting from scratch. \$\endgroup\$ – Gareth Rees Nov 13 '13 at 15:54

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.