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中用PIL库批量给图片加上序号的教程
May 06 Python
python计算方程式根的方法
May 07 Python
详解Python3除法之真除法、截断除法和下取整对比
May 23 Python
FFT快速傅里叶变换的python实现过程解析
Oct 21 Python
Python3.7 读取 mp3 音频文件生成波形图效果
Nov 05 Python
PyCharm汉化安装及永久激活详细教程(靠谱)
Jan 16 Python
python实现五子棋游戏(pygame版)
Jan 19 Python
Python如何读取、写入JSON数据
Jul 28 Python
Python描述数据结构学习之哈夫曼树篇
Sep 07 Python
pytest进阶教程之fixture函数详解
Mar 29 Python
tensorflow学习笔记之tfrecord文件的生成与读取
Mar 31 Python
Python中22个万用公式的小结
Jul 21 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
利用PHP实现智能文件类型检测的实现代码
2011/08/02 PHP
php使用for语句输出三角形的方法
2015/06/09 PHP
thinkPHP模型初始化实例分析
2015/12/03 PHP
PHP实现上传多文件示例代码
2017/02/20 PHP
通过url查找a元素应用案例
2014/04/29 Javascript
文本框倒叙输入让输入框的焦点始终在最开始的位置
2014/09/01 Javascript
jQuery中判断对象是否存在的方法汇总
2016/02/24 Javascript
jQuery向父辈遍历的简单方法
2016/09/18 Javascript
AngularJS中的JSONP实例解析
2016/12/01 Javascript
原生js实现回复评论功能
2017/01/18 Javascript
二维码图片生成器QRCode.js简单介绍
2017/08/18 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
2018/03/27 Javascript
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
angular2 ng2-file-upload上传示例代码
2018/08/23 Javascript
Vuex 在Vue 组件中获得Vuex 状态state的方法
2018/08/27 Javascript
彻底弄懂 JavaScript 执行机制
2018/10/23 Javascript
JavaScript 点击触发复制功能实例详解
2018/11/02 Javascript
微信小程序之事件交互操作实例分析
2018/12/03 Javascript
webpack + vue 打包生成公共配置文件(域名) 方便动态修改
2019/08/29 Javascript
vue使用exif获取图片旋转,压缩的示例代码
2020/12/11 Vue.js
[01:20]辉夜杯背景故事宣传片《辉夜传说》
2015/12/25 DOTA
python嵌套函数使用外部函数变量的方法(Python2和Python3)
2016/01/31 Python
Django url,从一个页面调到另个页面的方法
2019/08/21 Python
django xadmin中form_layout添加字段显示方式
2020/03/30 Python
Django用户身份验证完成示例代码
2020/04/03 Python
基于Html5实现的react拖拽排序组件示例
2018/08/13 HTML / CSS
世界上最大的网络主机公司:1&1
2016/10/12 全球购物
Smashbox英国官网:美国知名彩妆品牌
2017/11/13 全球购物
测绘工程个人的自我评价
2013/11/10 职场文书
财务负责人任命书
2014/06/06 职场文书
2014年学生资助工作总结
2014/12/18 职场文书
2014年优秀党员材料
2014/12/18 职场文书
销售合作意向书范本
2015/05/08 职场文书
海上钢琴师观后感
2015/06/03 职场文书
技术转让协议书
2016/03/19 职场文书
Redis如何一键部署脚本
2021/04/12 Redis