Write 10k integers to a file using struct

John Hunter jdhunter at ace.bsd.uchicago.edu
Tue Oct 26 16:29:09 EDT 2004


>>>>> "Thomas" == Thomas  <2002 at weholt.org> writes:

    Thomas> What's the quickest way to write and read 10.000 integer
    Thomas> values ( or more ) to and from a file? Using struct
    Thomas> somehow? The example in the docs shows how to handle to or
    Thomas> three arguments, but is the fastest way to write and read
    Thomas> just a simple :

    Thomas> while data: f.write(struct.pack(format, integer-value))

    Thomas> or is there another, quicker and nicer way to do it????

When handling arrays of numbers of that size, you may want to think
about using numeric/numarray.  In the example below, I use randint to
simply to create a list of random integers for demo purposes.
 
1 >>> import random
 
2 >>> nums = [random.randint(0,100000) for i in range(10000)]
 
3 >>> from numarray import array, fromfile
 
4 >>> a = array(nums)
 
5 >>> a.typecode
----> a.typecode()
Out[5]: 'l'
 
6 >>> a.tofile?
Type:           instancemethod
Base Class:     <type 'instancemethod'>
String Form:    <bound method NumArray.tofile of array([ 5193, 43059, 91249, ..., 13735, 38070, 75129])>
Namespace:      Interactive
File:           /usr/local/lib/python2.3/site-packages/numarray/generic.py
Definition:     a.tofile(self, file)
Docstring:
    Write the array as a binary image to a file.
     
    If file is a string, it attempts to open a file with that name,
    otherwise it assumes file is a file object. At the moment if
    special positioning is needed in the file one must do that with
    the file object beforehand. More options may be added to this
    method to allow positioning or appends.
     
    Note that for numerical data, the system byte order in which
    the data is represented is *not* recorded in the file.  This
    renders the file non-portable because extra information is
    required to interpret it on different machines than the one it
    was created on.
 
 
7 >>> a.tofile('mynums.dat')
 
8 >>> fromfile?
Type:           function
Base Class:     <type 'function'>
String Form:    <function fromfile at 0xb4b2c614>
Namespace:      Interactive
File:           /usr/local/lib/python2.3/site-packages/numarray/numarraycore.py
Definition:     fromfile(file, type, shape=None)
Docstring:
    Create an array from binary file data
     
    If file is a string then that file is opened, else it is assumed
    to be a file object. No options at the moment, all file positioning
    must be done prior to this function call with a file object
 
 
9 >>> b = fromfile('mynums.dat', 'l')
 
10 >>> b.shape
Out[10]: (10000,)

11 >>> a is b
Out[11]: False
 
12 >>> a==b
Out[12]: array([1, 1, 1, ..., 1, 1, 1], type=Bool)




More information about the Python-list mailing list