-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfileio.py
executable file
·57 lines (49 loc) · 1.44 KB
/
fileio.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/usr/bin/env python
import struct
FORMATS = {'char':('b',1),'uchar':('B',1),
'short':('h',2),'ushort':('H',2),
'int':('i',4),'uint':('I',4),
'long':(8,'l'),'ulong':('L',8),
'float':('f',4),'double':('d',8),
'string':('b',1)}
ENDIANS = {'little':'<','big':'>','native':'@'}
def fwrite(f,data,dtype,dendian='native'):
endian = ENDIANS[dendian]
fmt = FORMATS[dtype][0]
typesize = FORMATS[dtype][1]
dsize = len(data)
structfmt = '%s%i%s' % (endian,dsize,fmt)
rawdata = struct.pack(structfmt,*data)
f.write(rawdata)
return len(rawdata)
def fread(f,dsize,dtype,dendian='native'):
endian = ENDIANS[dendian]
fmt = FORMATS[dtype][0]
typesize = FORMATS[dtype][1]
nbytes = dsize*typesize
rawdata = f.read(nbytes)
structfmt = '%s%i%s' % (endian,dsize,fmt)
data = struct.unpack(structfmt,rawdata)
if dsize == 1:
data = data[0]
if dtype == 'string':
data = ''.join([chr(d) for d in data])
return data
if __name__ == '__main__':
indata = [4,5,6]
fname = 'foo.dat'
f = open(fname,'wb')
fwrite(f,indata,'ushort')
f.close()
f = open(fname,'rb')
outdata = fread(f,3,'ushort')
f.close()
print indata,outdata
indata = [4.1,5.2,6.3]
f = open(fname,'wb')
fwrite(f,indata,'float')
f.close()
f = open(fname,'rb')
outdata = fread(f,3,'float')
f.close()
print indata,outdata