亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python使用正則搜索字符串或文件中的浮點數代碼實例

系統 1779 0

用python和numpy處理數據次數比較多,寫了幾個小函數,可以方便地讀寫數據:

            
# -*- coding: utf-8 -*-
#----------------------------------------------------------------------
# FileName:gettxtdata.py
#功能:讀取字符串和文件中的數值數據(浮點數)
#主要提供類似matlab中的dlmread和dlmwrite函數
#同時提供loadtxtdata和savetxtdata函數
#Data: 2013-1-10
#Author:吳徐平
#----------------------------------------------------------------------
import numpy
#----------------------------------------------------------------------
def StringToDoubleArray(String):
  """
  #將字符串中的所有非Double類型的字符全部替換成空格
  #以'#'開頭注釋直至行尾,都被清空
  #返回一維numpy.array數組

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

  if len(String.strip())>0:
    #清空注釋行,都是以'#'開頭子字符
    doublestring=re.sub('#.*$', " ", String, count=0, flags=re.IGNORECASE)
    #刪除非數字字符      
    doublestring=re.sub('[^0-9.e+-]', " ", doublestring, count=0, flags=re.IGNORECASE)
    #去掉不正確的數字格式(代碼重復是有必要的)
    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)
    #去掉首尾空格
    doublestring=doublestring.strip()
    if len(doublestring)>0:
      StrIOds=StringIO(doublestring)
      DataArray= numpy.genfromtxt(StrIOds)
  
  return DataArray

#----------------------------------------------------------------------
def GetDoubleListFromString(String):
  """
  #使用換行符分割字符串
  #將字符串中的所有非Double類型的字符全部替換成空格
  #以'#'開頭注釋直至行尾,都被清空
  #將每一行轉換成numpy.array數組
  #返回numpy.array數組的列表

  """ 
  from StringIO import StringIO
  import re
 
  DoubleList=[]
  StringList=String.split('\n')#使用換行符分割字符串
  for Line in StringList:
    if len(Line.strip())>0:
      #清空注釋行,都是以'#'開頭子字符
      doublestring=re.sub('#.*$', " ", Line, count=0, flags=re.IGNORECASE)
      #刪除非數字字符      
      doublestring=re.sub('[^0-9.e+-]', " ", doublestring, count=0, flags=re.IGNORECASE)
      #去掉不正確的數字格式(代碼重復是有必要的)
      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)
      #去掉首尾空格
      doublestring=doublestring.strip()
      if len(doublestring)>0:
        StrIOds=StringIO(doublestring)
        DoubleList.append(numpy.genfromtxt(StrIOds))   
  return DoubleList
  
#----------------------------------------------------------------------
def GetDoubleListFromFile(FileName):
  """
  #將文本文件中的所有Double類型的字符全部替換成numpy.array數組
  #每一行都是numpy.array數組
  ##返回numpy.array數組的列表
  #注意:返回列表的每個元素又都是一個numpy.array數組
  #注意:返回列表的每個元素(或文件每行)可以包含不同多個數的數字

  """ 
  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.
  #分隔符默認是:";",",",空格類 (包括\t)等等
  #以#開頭的被認為是注釋,不會被讀取
  #Return Value:二維數值數組(numpy.ndarray)
  #對文本中數據的排列格式要求最低,且容許出現注釋字符,智能化程度最高,但速度較慢
  """
  DoubleList=GetDoubleListFromFile(FileName)
  dlsize=[]#每一行數組的大小
  for dL in DoubleList:
    dlsize.append(dL.size)
    
  MinColumnSize=min(dlsize)#數組的最大列數
  MaxColumnSize=max(dlsize)#數組的最小列數
  #數組創建和賦值
  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.
  #分隔符默認是:";",",",空格類 (包括\t)和自定義的delimiter等
  #Return Value:  二維數值數組(numpy.ndarray)
  #對文本中數據的排列格式要求較高,且不容許出現注釋字符,智能化程度較低,但速度較快
  """
  from StringIO import StringIO
  import re
  
  file_handle=open(filename,'r')
  LinesALL=file_handle.read()#讀入字符串
  file_handle.close()
  
  DelimiterALL=delimiter+",;"#分隔符
  SpaceString=" "#空格
  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
  
#----------------------------------------------------------------------
#測試程序 
#----------------------------------------------------------------------
if __name__ == '__main__':
  #生成隨機數
  data=numpy.random.randn(3,4)
  filename='D:/x.txt'
  #寫入文件
  dlmwrite(filename,data)
  x=GetDoubleListFromFile(filename)
  print(x)
  print(dlmread(filename))
  y=StringToDoubleArray('79l890joj')
  print(y)
  z=loadtxtdata(filename)
  print(z)
          

我只在python2.7中試過,如果要在python3.x中使用,可自行測試.


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美一级α片毛片免费观看 | 欧美成人性色大片在线观看 | 久久www视频 | 久久精品国产免费中文 | 爱爱视频免费在线观看 | 久久久久久尹人网香蕉 | 极品美女一级毛片免费 | 亚欧毛片| 久久久精品视频免费观看 | a拍拍男女免费看全片 | 182午夜在线观看 | 中文字幕永久视频 | 国产日韩精品一区在线不卡 | 2020久久精品永久免费 | 欧美精品国产一区二区 | 天天干天天干天天干天天 | 亚洲免费视频一区二区三区 | 最刺激黄a大片免费观看下截 | 国产精品成人一区二区不卡 | 日韩av成人 | 日韩第三页| 波多一区 | 久久久久国产精品免费网站 | 久久免费精品视频在线观看 | 欧美日穴 | 亚洲国产婷婷综合在线精品 | 999在线观看视频 | 国产精品99一区二区三区 | 日本一级毛片a免费播放 | 四虎爱爱 | 欧美日韩在线免费观看 | 亚洲欧美日韩中文字幕在线一区 | 精品视频在线视频 | 日韩欧美在线免费观看 | 伊人国产在线播放 | 人人爰人人人人人鲁 | 精品久久久久久久久中文字幕 | 久久日韩精品激情 | 成人在线视频网 | 亚洲视频精品 | 欧美国产成人精品一区二区三区 |