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\$
3
  • 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\$ Commented Nov 13, 2013 at 3:02
  • \$\begingroup\$ … but it's also acceptable as a Code Review question. \$\endgroup\$ Commented Nov 13, 2013 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\$ Commented Nov 13, 2013 at 13:16

1 Answer 1

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\$
2
  • 2
    \$\begingroup\$ Note that pickle's binary format is incompatible with the original question. \$\endgroup\$ Commented Nov 13, 2013 at 15:51
  • \$\begingroup\$ Yes, that's right: I'm assuming here that the OP is starting from scratch. \$\endgroup\$ Commented Nov 13, 2013 at 15:54

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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