用python和numpy读写将字符串或文件中的数据
2013-01-09 18:02
741 查看
用python和numpy处理数据次数比较多,写了几个小函数,可以方便地读写数据,都放在pypi里面了:
能上网的用户建议直接使用pip安装wlab包:
新手可直接使用下面的文件:
能上网的用户建议直接使用pip安装wlab包:
pip install wlab给个图吧:
新手可直接使用下面的文件:
# -*- coding: utf-8 -*- #~ #---------------------------------------------------------------------- #~ module:wlab #~ Filename:WLoadSave.py #~ 吴徐平的python科学计算文件 #~ Function : #~ Read and Save *.txt and *.mat Data-files easy #~ 功能:读取字符串和文件中的数值数据(浮点数) #~ 主要提供类似matlab中的dlmread和dlmwrite函数 #~ 导入scipy中读取和保存matlab的*.mat文件的函数:loadmat和savemat #~ 提供字符串转换为数值数组的函数str2num,str2list #~ Data: 2013-08-05,星期一 #~ Author:吴徐平 #~ Email:wxp07@qq.com #~ #---------------------------------------------------------------------- # 读取和保存matlab的*.mat文件 from scipy.io import loadmat from scipy.io import savemat #~ #---------------------------------------------------------------------- import numpy import scipy #~ #---------------------------------------------------------------------- def str2num(LineString,comment='#'): """ #~ >>>NumArray=str2num(LineString,comment='#') #~ 将字符串中的所有非Double类型的字符全部替换成空格 #~ 以'#'开头注释直至行尾,都被清空 #~ 返回一维numpy.array数组 """ from StringIO import StringIO import re,numpy NumArray=numpy.empty([0],numpy.float64) NumStr=LineString.strip() #~ ignore comment string for cmt in comment: CmtRe=cmt+'.*$' NumStr=re.sub(CmtRe, " ", NumStr.strip(), count=0, flags=re.IGNORECASE) #~ delete all non-number characters,replaced by blankspace. NumStr=re.sub('[^0-9.e+-]', " ", NumStr, count=0, flags=re.IGNORECASE) #~ Remove incorrect combining-characters for double type. NumStr=re.sub('[.e+-](?=\s)', " ", NumStr.strip(), count=0, flags=re.IGNORECASE) NumStr=re.sub('[.e+-](?=\s)', " ", NumStr.strip(), count=0, flags=re.IGNORECASE) NumStr=re.sub('[e+-]$', " ", NumStr.strip(), count=0, flags=re.IGNORECASE) NumStr=re.sub('[e+-]$', " ", NumStr.strip(), count=0, flags=re.IGNORECASE) if len(NumStr.strip())>0: StrIOds=StringIO(NumStr.strip()) NumArray= numpy.genfromtxt(StrIOds) return NumArray #~ #---------------------------------------------------------------------- def file2list(Filename,comment='#',SkipHeadLine=0): """ #~ >>>NumList=file2list(Filename,comment='#',SkipHeadLine=0) #~ 使用换行符分割字符串 #~ 将字符串中的所有非Double类型的字符全部替换成空格 #~ 以'#'开头注释直至行尾,都被清空 #~ 忽略文件头所有的行数:SkipHeadLine #~ 将每一行转换成numpy.array数组 #~ 返回numpy.array数组的列表 #~ 注意:每一行的数组中的元素个数可以不一样 """ from StringIO import StringIO import re,numpy file=open(Filename, 'r') String = file.read() file.close() NumList=[] StringList=String.split('\n')#使用换行符分割字符串 LineNum=0 for Line in StringList: LineNum=LineNum+1 if (LineNum>SkipHeadLine): NumArray=str2num(Line,comment) if len(NumArray)>0: NumList.append(NumArray) return NumList #~ #---------------------------------------------------------------------- def str2list(String,comment='#',SkipHeadLine=0): """ #~ >>>NumList=str2list(String,comment='#',SkipHeadLine=0): #~ 使用换行符分割字符串 #~ 将字符串中的所有非Double类型的字符全部替换成空格 #~ 以'#'开头注释直至行尾,都被清空 #~ 忽略文件头所有的行数:SkipHeadLine #~ 将每一行转换成numpy.array数组 #~ 返回numpy.array数组的列表 #~ 注意:每一行的数组中的元素个数可以不一样 """ from StringIO import StringIO import re,numpy NumList=[] StringList=String.split('\n')#使用换行符分割字符串 LineNum=0 for Line in StringList: LineNum=LineNum+1 if (LineNum>SkipHeadLine): NumArray=str2num(Line,comment) if len(NumArray)>0: NumList.append(NumArray) return NumList #~ #---------------------------------------------------------------------- def dlmread(Filename,comment='#',dtype=numpy.float64,SkipHeadLine=0): """ #~ Load Data From Txt-File. #~ >>>NumpyArray= dlmread(Filename,comment='#',dtype=numpy.float64,SkipHeadLine=0) #~ 分隔符默认是:";",",",空格类 (包括\t)等等 #~ 以#等开头的被认为是注释,不会被读取 #~ 忽略文件头所有的行数:SkipHeadLine #~ Return Value:二维数值数组(numpy.ndarray) #~ 对文本中数据的排列格式要求最低,且容许出现注释字符,智能化程度最高,但速度较慢 #~ 示例: #~ 直接读取文件,默认以#等开头的被认为是注释,不会被读取 #~ >>> x=dlmread(Filename) #~ 以#!等开头的被认为是注释,不会被读取 #~ >>> x=dlmread(Filename,comment='#!') #~ 直接读取文件,指定读取类型 """ import numpy NumList=file2list(Filename,comment='#',SkipHeadLine=SkipHeadLine) #~ 判断NumList是否为空 if (len(NumList)>0): dlsize=[]#每一行数组的大小 for dL in NumList: dlsize.append(dL.size) #~ 判断dlsize的列数 MinColumnSize=min(dlsize)#数组的最大列数 MaxColumnSize=max(dlsize)#数组的最小列数 #~ 数组创建和赋值 NumpyArray=numpy.empty([len(NumList),MinColumnSize],dtype=dtype) row=range(0,len(NumList)) colum=range(0,MinColumnSize) for i in row: for j in colum: NumpyArray[i][j]=NumList[i][j] else: NumpyArray=[] return NumpyArray #~ #---------------------------------------------------------------------- def dlmwrite(Filename, X, fmt='%16.8e',delimiter=' ', newline='\n',header=''): """ #~ Save Data To Txt-File. #~ >>> dlmwrite(Filename, X, fmt='%16.8e',delimiter=' ', newline='\n',header=''): """ import numpy numpy.savetxt(Filename, X, fmt=fmt, delimiter=delimiter, newline=newline,header=header) return #~ #---------------------------------------------------------------------- def tests(): x=numpy.random.randn(3,4) print(x) Filename='x.txt' header='look at this file' dlmwrite(Filename,x,header=header) y=dlmread(Filename) print(y) return 'wlab tests finished!' #~ #主程序测试 if __name__ == '__main__': x=numpy.random.randn(3,4) print(x) Filename='x.txt' header='look at this file' dlmwrite(Filename,x,header=header) y=dlmread(Filename) print(y)
相关文章推荐
- Python 学习(4)---文件的读写操作以及数据的腌制
- 如何在python中读写和存储matlab的数据文件(*.mat)
- 【python学习笔记】22:numpy文件读写和一些常量
- Numpy学习(2):将cifar10/100数据文件读入到python数据结构(字典)中
- 快速入门Python中文件读写IO是如何来操作外部数据的?
- 【C/C++学院】0826-文件重定向/键盘输入流/屏幕输出流/字符串输入输出/文件读写简单操作/字符文件读写二进制与文本差别/get与getline挖掘数据/二进制与文本差别/随机位置/多线程初级
- 如何用idapython脚本获取字符串窗口的数据并写入文件
- 如何在python中读写和存储matlab的数据文件(*.mat)
- python 学习正则与文件读写 从字符串里面找出 邮箱正则
- python数据存储系列教程——python对象与json字符串的相互转化,json文件的存储与读取
- 如何在python中读写和存储matlab的数据文件(*.mat)
- python数据存储系列教程——xls文件的读写
- 如何在python中读写和存储matlab的数据文件(*.mat)
- python :用numpy把数据写进文件
- Python学习笔记(3)--数据文件的读写
- python/机器学习:读写机器学习中常用的.CSV数据文件t
- 如何在python中读写和存储matlab的数据文件(*.mat)
- Java基本功练习十四(字符串和文本IO【文件读写数据、字符串生成器、String类方法、相关技巧】)
- python : 将txt文件中的数据读为numpy数组或列表
- python数据分析之(4)读写数据文件CSV,EXCEL等