On 12/18/11 12:33, traveller3141 wrote:
To test this, I made a small sample file (sillyNums.txt) as follows;
109
345
2
1234556
f=open("sillyNums.txt","r")
data = array.array('i')
data.fromstring(f.read(data.itemsize* bufferSize))
print data
The output was nonsense:
array('i', [171520049, 171258931])
I assume this has something to do with my incorrectly specifying how the
various bit/bytes line up. Does anyone know if there's a simple explanation
of how I can do this correctly, or why I can't do it at all?
It reads the bytes directly as if using struct.unpack() as in
>>> data = '109\n345\n2\n123456'
>>> print ' '.join(hex(ord(c))[2:] for c in data)
31 30 39 a 33 34 35 a 32 a 31 32 33 34 35 36
>>> 0x0a393031 # 4 bytes
171520049
It sounds like you want something like
from itertools import islice
a = array.array('i')
a.fromlist(map(int, islice(f, bufferSize)))
which will read the first 2 lines of the file (using islice() on
the file-object and slicing the first 2 items), and map the
string representations into integers, then pass the resulting
list of integer data to the array.array.fromlist() method.
-tkc
--
http://mail.python.org/mailman/listinfo/python-list