def fromfile(self,filename):

    # dispatch convert filename in list of lines
    self.filename=filename
    if type(filename) is str:
      if len(filename)<200:
        try:
          file=open(filename)
          if filename[-3:]=='.gz':
            file=GzipFile(fileobj=file)
        except IOError:
          try:
            file=open(filename+'.gz')
            file=GzipFile(fileobj=file)
          except IOError:
            file=[]
      else:
        file=filename.split('\n')
    elif type(filename) is list:
      file=filename
    else:
      file=[]

    if file:
      file=[line.split() for line in file]

      while 1:
        f=file.pop(0)
        if (f[0] == '@'):
          self.descs[f[1]]=typeconv(f[2]," ".join(f[3:]))
        elif ( f[0] == '*'): # self.labels lines
          f.pop(0)
          f=map(pythonname,f)
          self.labels=f
        elif (f[0] == '$'):  # type lines
          f.pop(0)
          self.types=f
          break
        elif (f[0].startswith('#')):  # comment lines
          pass

      file=[ tuple(map(typeconv,self.types,f)) for f in file ]
      data=rec.fromrecords(file,names=self.labels)
      self.idx=dict(enumerate(data['NAME']))
      for l in self.labels:
        self.data[l]=data[l]
        setattr(self,l,self.data[l])
        setattr(self,l.lower(),self.data[l])
        self.__class__.lookup[id(self.data[l])]=l
示例#2
0
    def fromfile(self, filename):

        # dispatch convert filename in list of lines
        self.filename = filename
        if type(filename) is str:
            if len(filename) < 200:
                try:
                    file = open(filename)
                    if filename[-3:] == '.gz':
                        file = GzipFile(fileobj=file)
                except IOError:
                    try:
                        file = open(filename + '.gz')
                        file = GzipFile(fileobj=file)
                    except IOError:
                        file = []
            else:
                file = filename.split('\n')
        elif type(filename) is list:
            file = filename
        else:
            file = []

        if file:
            file = [line.split() for line in file]

            while 1:
                f = file.pop(0)
                if (f[0] == '@'):
                    self.descs[f[1]] = typeconv(f[2], " ".join(f[3:]))
                elif (f[0] == '*'):  # self.labels lines
                    f.pop(0)
                    f = map(pythonname, f)
                    self.labels = f
                elif (f[0] == '$'):  # type lines
                    f.pop(0)
                    self.types = f
                    break
                elif (f[0].startswith('#')):  # comment lines
                    pass

            file = [tuple(map(typeconv, self.types, f)) for f in file]
            data = rec.fromrecords(file, names=self.labels)
            self.idx = dict(enumerate(data['NAME']))
            for l in self.labels:
                self.data[l] = data[l]
                setattr(self, l, self.data[l])
                setattr(self, l.lower(), self.data[l])
                self.__class__.lookup[id(self.data[l])] = l