* Minor updates.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# $Id: fortbin.py,v 1.2 2010-02-19 18:39:17 wirawan Exp $
|
||||
# $Id: fortbin.py,v 1.3 2010-05-28 18:43:14 wirawan Exp $
|
||||
#
|
||||
# wpylib.iofmt.fortbin module
|
||||
# Created: 20100208
|
||||
@@ -15,7 +15,7 @@ import sys
|
||||
from wpylib.sugar import ifelse
|
||||
|
||||
class fortran_bin_file(object):
|
||||
"""A tool for reading Fortran binary files.
|
||||
"""A tool for reading and writing Fortran binary files.
|
||||
|
||||
Caveat: On 64-bit systems, typical Fortran implementations still have int==int32
|
||||
(i.e. the LP64 programming model), unless "-i8" kind of option is enabled.
|
||||
@@ -34,10 +34,18 @@ class fortran_bin_file(object):
|
||||
def open(self, filename, mode="r"):
|
||||
self.F = open(filename, mode+"b")
|
||||
|
||||
def close(self):
|
||||
if getattr(self, "F", None):
|
||||
self.F.close()
|
||||
self.F = None
|
||||
|
||||
def read(self, *fields, **opts):
|
||||
"""Reads a Fortran record.
|
||||
The description of the fields are given as
|
||||
(name, dtype, length) tuples."""
|
||||
either (name, dtype) or (name, dtype, length) tuples.
|
||||
If length is not specified, then a scalar value is read.
|
||||
Length is a scalar for 1-D array, or a tuple or list for multidimensional
|
||||
array."""
|
||||
from numpy import fromfile as rd
|
||||
if self.debug or opts.get("debug"):
|
||||
dbg = lambda msg : sys.stderr.write(msg)
|
||||
@@ -62,9 +70,7 @@ class fortran_bin_file(object):
|
||||
"Attempting to read %d bytes from a record of length %d bytes" \
|
||||
% (expected_len, reclen)
|
||||
|
||||
if "out" in opts:
|
||||
rslt = opts["out"]
|
||||
elif "dest" in opts:
|
||||
if "dest" in opts:
|
||||
rslt = opts["dest"]
|
||||
else:
|
||||
rslt = {}
|
||||
@@ -108,7 +114,7 @@ class fortran_bin_file(object):
|
||||
|
||||
return rslt
|
||||
|
||||
def writevals(self, *vals, **opts):
|
||||
def write_vals(self, *vals, **opts):
|
||||
"""Writes a Fortran record.
|
||||
Only values need to be given, because the types are known.
|
||||
This is a direct converse of read subroutine."""
|
||||
@@ -159,7 +165,7 @@ class fortran_bin_file(object):
|
||||
reclen.tofile(self.F)
|
||||
|
||||
|
||||
def writefields(self, src, *fields, **opts):
|
||||
def write_fields(self, src, *fields, **opts):
|
||||
if (issubclass(src.__class__, dict) and issubclass(dict, src.__class__)) \
|
||||
or "__getitem__" in dir(src):
|
||||
def getval(d, k):
|
||||
@@ -189,6 +195,9 @@ class fortran_bin_file(object):
|
||||
else:
|
||||
raise ValueError, "Invalid field type: %s" % str(type(f))
|
||||
|
||||
self.write_vals(*vals, **opts)
|
||||
|
||||
|
||||
def array_major_dim(arr):
|
||||
"""Tests whether a numpy array is column or row major.
|
||||
It will return the following:
|
||||
|
||||
Reference in New Issue
Block a user