Ignore:
Timestamp:
02/04/19 12:50:23 (6 years ago)
Author:
bdef
Message:

CHG: py3 migration

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/py3/archive/arch.py

    r23677 r23689  
    11import numpy as np
    2 import math
    32import struct
    4 import sys
    5 import os
     3from os import path
    64from collections import OrderedDict
    75
     
    1816        # open file
    1917        try:
    20                 if not os.path.isfile(filename):
     18                if not path.isfile(filename):
    2119                        fid=open(filename,'wb')
    2220                else:
     
    3129                name=args[2*i]
    3230                write_field_name(fid,name)
    33                
     31
    3432                # write data associated with field name
    3533                data=args[2*i+1]
     
    4341                else:
    4442                        raise ValueError("archwrite : error writing data, invalid code entered '%d'" % code)
    45        
     43
    4644        fid.close()
    4745
     
    5553        """
    5654        try:
    57                 if os.path.isfile(filename):
     55                if path.isfile(filename):
    5856                        fid=open(filename,'rb')
    5957                else:
     
    6159        except IOError as e:
    6260                raise IOError("archread error : could not open file '%s' to read from" % filename)
    63        
     61
    6462        archive_results=[]
    6563
    6664        # read first result
    6765        result=read_field(fid)
     66
    6867        while result:
    6968                if fieldname == result['field_name']:
     
    7170                        archive_results=result['data']; # we only want the data
    7271                        break
    73                
     72
    7473                # read next result
    7574                result=read_field(fid)
    76        
     75
    7776        # close file
    7877        fid.close()
    79        
     78
    8079        return archive_results
    8180# }}}
     
    8887        """
    8988        try:
    90                 if os.path.isfile(filename):
     89                if path.isfile(filename):
    9190                        fid=open(filename,'rb')
    9291                else:
     
    9493        except IOError as e:
    9594                raise IOError("archread error : could not open file '%s' to read from" % filename)
    96        
     95
    9796        print('Source file: ')
    9897        print('\t{0}'.format(filename))
     
    106105                # go to next result
    107106                result=read_field(fid)
    108        
     107
    109108        # close file
    110109        fid.close()
     
    112111# }}}
    113112
    114 # Helper functions 
     113# Helper functions
    115114def write_field_name(fid,data): # {{{
    116115        """
     
    121120        reclen=len(data)+4+4
    122121        fid.write(struct.pack('>i',reclen))
    123        
     122
    124123        # write format code
    125124        code=format_archive_code(data);
     
    130129        # write string length, and then the string
    131130        fid.write(struct.pack('>i',len(data)))
    132         fid.write(struct.pack('>%ds' % len(data),data))
     131        fid.write(struct.pack('>{}s'.format(len(data)),data.encode('utf8')))
    133132# }}}
    134133def write_scalar(fid,data): # {{{
     
    143142        # write the format code (2 for scalar)
    144143        fid.write(struct.pack('>i',2))
    145        
     144
    146145        # write the double
    147146        fid.write(struct.pack('>d',data))
     
    158157        elif isinstance(data,(list,tuple)):
    159158                data=np.array(data).reshape(-1,)
    160        
     159
    161160        if np.ndim(data) == 1:
    162161                if np.size(data):
     
    164163                else:
    165164                        data=data.reshape(0,0)
    166        
     165
    167166        # get size of data
    168167        sz=data.shape
     
    175174                raise ValueError("archwrite error : can not write vector to binary file because it is too large")
    176175        fid.write(struct.pack('>i',reclen))
    177        
     176
    178177        # write format code
    179178        fid.write(struct.pack('>i',3))
     
    204203                        raise ValueError('archread error : a string was not present at the start of the arch file')
    205204                namelen=struct.unpack('>i',fid.read(struct.calcsize('>i')))[0]
    206                 fieldname=struct.unpack('>%ds' % namelen,fid.read(namelen))[0]
    207                
     205                fieldname=struct.unpack('>{}s'.format(namelen),fid.read(namelen))[0]
     206
    208207                # then, read the data
    209208                datalen=struct.unpack('>i',fid.read(struct.calcsize('>i')))[0]
     
    211210
    212211                if data_type==2:
    213                         # unpack scalar
     212                        # struct.upack scalar
    214213                        data=struct.unpack('>d',fid.read(struct.calcsize('>d')))[0]
    215214                elif data_type==3:
     
    218217                        raw_data=np.zeros(shape=(rows,cols),dtype=float)
    219218                        for i in range(rows):
    220                                 raw_data[i,:]=struct.unpack('>%dd' % cols,fid.read(cols*struct.calcsize('>d')))
    221                         # The matrix will be unpacked in order and will be filled left -> right by column
     219                                raw_data[i,:]=struct.unpack('>{}d'.format(cols),fid.read(cols*struct.calcsize('>d')))
     220                        # The matrix will be struct.upacked in order and will be filled left -> right by column
    222221                        # We need to reshape and transpose the matrix so it can be read correctly
    223222                        data=raw_data.reshape(raw_data.shape[::-1]).T
    224223                else:
    225224                        raise TypeError("Cannot read data type %d" % data_type)
    226                        
     225
    227226                # give additional data to user
    228227                if data_type==2:
     
    234233
    235234                result=OrderedDict()
    236                 result['field_name']=fieldname
     235                result['field_name']=fieldname.decode('utf8')
    237236                result['size']=data_size
    238237                result['data_type']=data_type_str
Note: See TracChangeset for help on using the changeset viewer.