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中list循环语句用法实例
Nov 10 Python
python类装饰器用法实例
Jun 04 Python
Python脚本实现自动将数据库备份到 Dropbox
Feb 06 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
Dec 12 Python
Python爬虫实现(伪)球迷速成
Jun 10 Python
python数据批量写入ScrolledText的优化方法
Oct 11 Python
python读取word文档,插入mysql数据库的示例代码
Nov 07 Python
python读取并写入mat文件的方法
Jul 12 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
Feb 03 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
Feb 28 Python
基于python计算并显示日间、星期客流高峰
May 07 Python
python中的random模块和相关函数详解
Apr 22 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
日本十大最佳动漫,全都是二次元的神级作品
2019/10/05 日漫
英雄试炼之肉山谷—引领RPG新潮流
2020/04/20 DOTA
php中return的用法实例分析
2015/02/28 PHP
php去除字符串中空字符的常用方法小结
2015/03/17 PHP
PHP 实现的将图片转换为TXT
2015/10/21 PHP
学习php设计模式 php实现单例模式(singleton)
2015/12/07 PHP
如何打开php的gd2库
2017/02/09 PHP
JavaScript 设计模式学习 Factory
2009/07/29 Javascript
根据对象的某一属性进行排序的js代码(如:name,age)
2010/08/10 Javascript
浅析jQuery(function(){})与(function(){})(jQuery)之间的区别
2014/01/09 Javascript
通过pjax实现无刷新翻页(兼容新版jquery)
2014/01/31 Javascript
Egret引擎开发指南之编译项目
2014/09/03 Javascript
JavaScript实现标题栏文字轮播效果代码
2015/10/24 Javascript
Vue.js bootstrap前端实现分页和排序
2017/03/10 Javascript
jQuery使用eraser.js插件实现擦除、刮刮卡效果的方法【附eraser.js下载】
2017/04/28 jQuery
jQuery读取本地的json文件(实例讲解)
2017/10/31 jQuery
使用vue-aplayer插件时出现的问题的解决
2018/03/02 Javascript
VueJS实现用户管理系统
2020/05/29 Javascript
解决vue初始化项目一直停在downloading template的问题
2020/11/09 Javascript
[00:53]2015国际邀请赛 中国区预选赛一触即发
2015/05/14 DOTA
[01:20:30]OG vs LGD 2018国际邀请赛淘汰赛BO3 第四场 8.26
2018/08/30 DOTA
Python解析树及树的遍历
2016/02/03 Python
Python微信库:itchat的用法详解
2017/08/14 Python
django使用html模板减少代码代码解析
2017/12/12 Python
python+tkinter编写电脑桌面放大镜程序实例代码
2018/01/16 Python
pandas系列之DataFrame 行列数据筛选实例
2018/04/12 Python
Python 实现文件打包、上传与校验的方法
2019/02/13 Python
利用python实现在微信群刷屏的方法
2019/02/21 Python
Java Spring项目国际化(i18n)详细方法与实例
2020/03/20 Python
商场开业庆典策划方案
2014/06/02 职场文书
篮球兴趣小组活动总结
2014/07/07 职场文书
铅球加油稿100字
2014/09/26 职场文书
卖房授权委托书样本
2014/10/05 职场文书
幼儿园小朋友毕业感言
2015/07/30 职场文书
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
2021/03/31 jQuery
python非标准时间的转换
2021/07/25 Python