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

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

系統 1524 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條評論
主站蜘蛛池模板: 日日射视频 | h视频在线观看免费网站 | 国产成人精品三区 | 久久嫩草影院免费看夜色 | 国产成人精品一区二三区2022 | 国产真实强j视频在线观看 国产真实偷乱视频在线观看 | 午夜一级毛片看看 | 国产精品亚洲欧美日韩区 | a级亚洲片精品久久久久久久 | 色婷婷久久综合中文网站 | 手机看片神马午夜片 | 精品久久久久久中文字幕专区 | 国产在线91精品 | 久久久久久久久综合影视网 | 青娱乐久久| 在线观看国产精美视频 | 国产午夜免费视频 | 香蕉蕉亚亚洲aav综合 | 成年性午夜免费视频网站不卡 | 中文字幕一区二区三区四区五区人 | 亚洲伊人久久综合一区二区 | 69成人做爰视频在线观看 | 99免费| 老子午夜伦影理论片 | 中文字幕免费观看视频 | 久久嫩草影院免费看夜色 | 91精品国产露脸在线 | 99久久免费国产精品 | 国产理论视频 | 性欧美成人免费观看视 | 91伦理视频 | 国产精品一区在线麻豆 | 久久国产美女免费观看精品 | 久久亚洲伊人 | 四虎.com| 国产凹凸在线一区二区色老头 | 日韩欧美国产成人 | 伊人网站视频 | 亚洲精品福利一区二区三区 | 日本在线精品视频 | 欧美一级毛片在线播放 |