python使用正则搜索字符串或文件中的浮点数代码实例


Posted in Python onJuly 11, 2014

用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中使用,可自行测试.

Python 相关文章推荐
Python读取图片EXIF信息类库介绍和使用实例
Jul 10 Python
Python3中常用的处理时间和实现定时任务的方法的介绍
Apr 07 Python
python中pygame针对游戏窗口的显示方法实例分析(附源码)
Nov 11 Python
python实现单线程多任务非阻塞TCP服务端
Jun 13 Python
python将字典内容存入mysql实例代码
Jan 18 Python
Python用61行代码实现图片像素化的示例代码
Dec 10 Python
python发qq消息轰炸虐狗好友思路详解(完整代码)
Feb 15 Python
Python递归函数特点及原理解析
Mar 04 Python
结束运行python的方法
Jun 16 Python
10行Python代码实现Web自动化管控的示例代码
Aug 14 Python
使用Python提取文本中含有特定字符串的方法示例
Dec 09 Python
Python基础之条件语句详解
Jun 16 Python
Python实现的二维码生成小软件
Jul 11 #Python
让python同时兼容python2和python3的8个技巧分享
Jul 11 #Python
Python操作SQLite简明教程
Jul 10 #Python
Python读取图片EXIF信息类库介绍和使用实例
Jul 10 #Python
Python采集腾讯新闻实例
Jul 10 #Python
使用wxpython实现的一个简单图片浏览器实例
Jul 10 #Python
Python语言的12个基础知识点小结
Jul 10 #Python
You might like
一个简易需要注册的留言版程序
2006/10/09 PHP
php中使用explode查找某个字符是否存在的方法
2011/07/12 PHP
php curl选项列表(超详细)
2013/07/01 PHP
浅谈PHP调用Webservice思路及源码分享
2014/06/04 PHP
PHP实现Soap通讯的方法
2014/11/03 PHP
PHP中使用php5-ffmpeg撷取视频图片实例
2015/01/07 PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
2015/01/07 PHP
PHP实现的简单分页类及用法示例
2016/05/06 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
2019/05/08 PHP
在线游戏大家来找茬II
2006/09/30 Javascript
jQuery对val和atrr("value")赋值的区别介绍
2014/09/26 Javascript
javascript几个易错点记录
2014/11/26 Javascript
理解javascript回调函数
2014/12/28 Javascript
jquery简单图片切换显示效果实现方法
2015/01/14 Javascript
PHPExcel中的一些常用方法汇总
2015/01/23 Javascript
jQuery实现contains方法不区分大小写的方法
2015/02/13 Javascript
jQuery UI设置固定日期选择特效代码分享
2015/08/27 Javascript
jQuery基于ID调用指定iframe页面内的方法
2016/07/06 Javascript
H5用户注册表单页 注册模态框!
2016/09/17 Javascript
js 获取图像缩放后的实际宽高,位置等信息
2017/03/07 Javascript
JavaScript DOM元素常见操作详解【添加、删除、修改等】
2018/05/09 Javascript
[57:53]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#3OG VS VP
2016/03/03 DOTA
浅析Python中的序列化存储的方法
2015/04/28 Python
Python实现将不规范的英文名字首字母大写
2016/11/15 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
2019/01/26 Python
通过PHP与Python代码对比的语法差异详解
2019/07/10 Python
python的faker库用法
2019/11/28 Python
详解基于python的图像Gabor变换及特征提取
2020/10/26 Python
Python基于execjs运行js过程解析
2020/11/27 Python
澳大利亚当地社区首选的光学商店:1001 Optical
2019/08/24 全球购物
团员个人的自我评价
2013/12/02 职场文书
银行竞聘演讲稿范文
2014/04/23 职场文书
公司离职证明范本(汇总)
2014/09/10 职场文书
学校政风行风自查自纠报告
2014/10/21 职场文书
利用 Python 的 Pandas和 NumPy 库来清理数据
2022/04/13 Python