Python USES regular searches for instances of floating point code in strings or files

  • 2020-04-02 13:50:48
  • OfStack

With python and numpy to deal with data more times, wrote a few small functions, you can easily read and write data:


# -*- coding: utf-8 -*-
#----------------------------------------------------------------------
# FileName:gettxtdata.py
# function : Reads numeric data in strings and files ( Floating point Numbers )
# Mainly provide similar matlab In the dlmread and dlmwrite function 
# At the same time provide loadtxtdata and savetxtdata function 
#Data: 2013-1-10
#Author: Wu Xu flat 
#----------------------------------------------------------------------
import numpy
#----------------------------------------------------------------------
def StringToDoubleArray(String):
  """
  # All non - string Double Type characters are all replaced with Spaces 
  # In order to '#' Comment from the beginning to the end of the line , Have been cleared 
  # Returns a d numpy.array An array of 

  """ 
  from StringIO import StringIO
  import re
  
  DataArray=numpy.empty([0],numpy.float64)

  if len(String.strip())>0:
    # Empty comment lines , Are based on '#' Opening character 
    doublestring=re.sub('#.*$', " ", String, count=0, flags=re.IGNORECASE)
    # Delete non-numeric characters       
    doublestring=re.sub('[^0-9.e+-]', " ", doublestring, count=0, flags=re.IGNORECASE)
    # Remove incorrect number formatting ( Code duplication is necessary )
    doublestring=re.sub('[.e+-](?=s)', " ", doublestring, count=0, flags=re.IGNORECASE)
    doublestring=re.sub('[.e+-](?=s)', " ", doublestring, count=0, flags=re.IGNORECASE)
    doublestring=re.sub('[e+-]$', " ", doublestring, count=0, flags=re.IGNORECASE)
    doublestring=re.sub('[e+-]$', " ", doublestring, count=0, flags=re.IGNORECASE)
    # Remove Spaces 
    doublestring=doublestring.strip()
    if len(doublestring)>0:
      StrIOds=StringIO(doublestring)
      DataArray= numpy.genfromtxt(StrIOds)
  
  return DataArray

#----------------------------------------------------------------------
def GetDoubleListFromString(String):
  """
  # Split the string with a newline character 
  # All non - string Double Type characters are all replaced with Spaces 
  # In order to '#' Comment from the beginning to the end of the line , Have been cleared 
  # Convert each row to numpy.array An array of 
  # return numpy.array List of arrays 

  """ 
  from StringIO import StringIO
  import re
 
  DoubleList=[]
  StringList=String.split('n')# Split the string with a newline character 
  for Line in StringList:
    if len(Line.strip())>0:
      # Empty comment lines , Are based on '#' Opening character 
      doublestring=re.sub('#.*$', " ", Line, count=0, flags=re.IGNORECASE)
      # Delete non-numeric characters       
      doublestring=re.sub('[^0-9.e+-]', " ", doublestring, count=0, flags=re.IGNORECASE)
      # Remove incorrect number formatting ( Code duplication is necessary )
      doublestring=re.sub('[.e+-](?=s)', " ", doublestring, count=0, flags=re.IGNORECASE)
      doublestring=re.sub('[.e+-](?=s)', " ", doublestring, count=0, flags=re.IGNORECASE)
      doublestring=re.sub('[e+-]$', " ", doublestring, count=0, flags=re.IGNORECASE)
      doublestring=re.sub('[e+-]$', " ", doublestring, count=0, flags=re.IGNORECASE)
      # Remove Spaces 
      doublestring=doublestring.strip()
      if len(doublestring)>0:
        StrIOds=StringIO(doublestring)
        DoubleList.append(numpy.genfromtxt(StrIOds))   
  return DoubleList
  
#----------------------------------------------------------------------
def GetDoubleListFromFile(FileName):
  """
  # Will text all in the file Double Type characters are all replaced with numpy.array An array of 
  # Every row numpy.array An array of 
  ## return numpy.array List of arrays 
  # Pay attention to : Each element in the returned list is one again numpy.array An array of 
  # Pay attention to : Returns each element of the list ( Or file per line ) It can contain Numbers of different Numbers 

  """ 
  file=open(FileName, 'r')
  read_file = file.read()
  file.close() 
  DoubleList=GetDoubleListFromString(read_file)
  return DoubleList

def dlmread(FileName,dtype=numpy.float64):
  """
  #Load Data From Txt-File.
  # The delimiter defaults to :";",",", Space class  ( including t) , etc. 
  # In order to # The beginning is considered a comment , Will not be read 
  #Return Value: Two dimensional array of values (numpy.ndarray)
  # Minimum requirement for arrangement of data in text , Comment characters are allowed , The highest degree of intelligence , But it's slower 
  """
  DoubleList=GetDoubleListFromFile(FileName)
  dlsize=[]# The size of each row of the array 
  for dL in DoubleList:
    dlsize.append(dL.size)
    
  MinColumnSize=min(dlsize)# The maximum number of columns in an array 
  MaxColumnSize=max(dlsize)# The minimum number of columns in an array 
  # Array creation and assignment 
  DoubleArray=numpy.empty([len(DoubleList),MinColumnSize],dtype=dtype)
  
  row=range(0,len(DoubleList))
  colum=range(0,MinColumnSize)
  
  for i in row:
    for j in colum:
      DoubleArray[i][j]=DoubleList[i][j] 
    
  return DoubleArray
#----------------------------------------------------------------------

def loadtxtdata(filename,delimiter=""):
  """
  #Load Data From Txt-File with delimiter.
  # The delimiter defaults to :";",",", Space class  ( including t) And custom delimiter Etc. 
  #Return Value:   Two dimensional array of values (numpy.ndarray)
  # The arrangement format of the data in the text is highly required , Comment characters are not allowed , The intelligence degree is low , But it's faster 
  """
  from StringIO import StringIO
  import re
  
  file_handle=open(filename,'r')
  LinesALL=file_handle.read()# Read in string 
  file_handle.close()
  
  DelimiterALL=delimiter+",;"# The separator 
  SpaceString=" "# The blank space 
  for RChar in DelimiterALL:
    LinesALL=LinesALL.replace(RChar,SpaceString)
    
  return numpy.genfromtxt(StringIO(LinesALL))
  
#----------------------------------------------------------------------  
def savetxtdata(filename, X, fmt='%.8e', delimiter=' ', newline='n'):
  """
  Save Data To Txt-File.
  """
  numpy.savetxt(filename, X, fmt=fmt, delimiter=delimiter, newline=newline)   
  return True
  
#----------------------------------------------------------------------
def dlmwrite(filename, X, fmt='%.8e', delimiter=' ', newline='n'):
  """
  Save Data To Txt-File.
  """
  numpy.savetxt(filename, X, fmt=fmt, delimiter=delimiter, newline=newline)   
  return True
  
#----------------------------------------------------------------------
# The test program  
#----------------------------------------------------------------------
if __name__ == '__main__':
  # Generate random number 
  data=numpy.random.randn(3,4)
  filename='D:/x.txt'
  # Written to the file 
  dlmwrite(filename,data)
  x=GetDoubleListFromFile(filename)
  print(x)
  print(dlmread(filename))
  y=StringToDoubleArray('79l890joj')
  print(y)
  z=loadtxtdata(filename)
  print(z)

I've only tried it in python2.7, and if you want to use it in python3.x, you can test it yourself.


Related articles: