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实现博客文章爬虫示例
Feb 26 Python
Python使用htpasswd实现基本认证授权的例子
Jun 10 Python
python通过imaplib模块读取gmail里邮件的方法
May 08 Python
Python数据结构与算法之图的广度优先与深度优先搜索算法示例
Dec 14 Python
python 2.7 检测一个网页是否能正常访问的方法
Dec 26 Python
python+mysql实现教务管理系统
Feb 20 Python
由面试题加深对Django的认识理解
Jul 19 Python
python中time库的实例使用方法
Oct 31 Python
Python读取文件内容为字符串的方法(多种方法详解)
Mar 04 Python
PyQt 如何创建自定义QWidget
Mar 24 Python
python实现局部图像放大
Nov 17 Python
详解在OpenCV中如何使用图像像素
Mar 03 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
雄兵连三大错觉:凯莎没了,凉冰阵亡了,华烨觉得自己又行了
2020/04/09 国漫
解析:通过php socket并借助telnet实现简单的聊天程序
2013/06/18 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
2014/07/08 PHP
smarty中js的调用方法示例
2014/10/27 PHP
php实现scws中文分词搜索的方法
2015/12/25 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
2017/02/08 PHP
dtree 网页树状菜单及传递对象集合到js内,动态生成节点
2012/04/14 Javascript
一款基于jQuery的图片场景标注提示弹窗特效
2015/01/05 Javascript
JavaScript的String字符串对象常用操作总结
2016/05/26 Javascript
JS实现淡入淡出图片效果的方法分析
2016/12/20 Javascript
js鼠标移动时禁止选中文字
2017/02/19 Javascript
js如何获取网页所有图片
2017/05/12 Javascript
使用ajax的post同步执行(实现方法)
2017/12/21 Javascript
js中DOM事件绑定分析
2018/03/18 Javascript
基于vue-element组件实现音乐播放器功能
2018/05/06 Javascript
springMvc 前端用json的方式向后台传递对象数组方法
2018/08/07 Javascript
小程序自定义模板实现吸顶功能
2020/01/08 Javascript
JavaScript读取本地文件常用方法流程解析
2020/10/12 Javascript
Python实现将目录中TXT合并成一个大TXT文件的方法
2015/07/15 Python
python制作爬虫并将抓取结果保存到excel中
2016/04/06 Python
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
2017/04/17 Python
python实现装饰器、描述符
2018/02/28 Python
python爬取微信公众号文章
2018/08/31 Python
Pyqt5 基本界面组件之inputDialog的使用
2019/06/25 Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
2020/02/17 Python
Python无头爬虫下载文件的实现
2020/04/02 Python
深入解析HTML5 Canvas控制图形矩阵变换的方法
2016/03/24 HTML / CSS
HTML5 body设置全屏背景图片的示例代码
2020/12/08 HTML / CSS
便携式太阳能系统的创新者:GOAL ZERO
2018/02/04 全球购物
Parfumdreams芬兰:购买香水和化妆品
2021/02/13 全球购物
实习生自荐信范文
2013/11/13 职场文书
书香校园活动方案
2014/02/28 职场文书
学雷锋活动总结范文
2014/04/25 职场文书
运动会跳远广播稿5篇
2014/09/17 职场文书
安装工程师岗位职责
2015/02/13 职场文书
小学三年级作文之写景
2019/11/05 职场文书