分享

Python 读取txt、csv、mat数据并载入到数组

 hdzgx 2019-12-24

一、txt文件数据载入到数组

    这里结合上一篇博文的数据来讲怎么方便的载入.txt文件到一个数组,数据如下所示:

1、自己写Python代码实现txt文本数据读取并载入成数组形式(PS:下面给了三种方法,选择理解)

# -*- coding: cp936 -*-import reimport linecacheimport numpy as npimport osfilename = 'preprocess1.txt'#数值文本文件转换为双列表形式[[...],[...],[...]],即动态二维数组#然后将双列表形式通过numpy转换为数组矩阵形式def txt_strtonum_feed(filename): data = [] with open(filename, 'r') as f:#with语句自动调用close()方法 line = f.readline() while line: eachline = line.split()###按行读取文本文件,每行数据以列表形式返回 read_data = [ float(x) for x in eachline[0:7] ] #TopN概率字符转换为float型 lable = [ int(x) for x in eachline[-1] ]#lable转换为int型 read_data.append(lable[0]) #read_data = list(map(float, eachline)) data.append(read_data) line = f.readline() return data #返回数据为双列表形式#数值文本文件直接转换为矩阵数组形式方法二def txt_to_matrix(filename): file=open(filename) lines=file.readlines() #print lines #['0.94\t0.81\t...0.62\t\n', ... ,'0.92\t0.86\t...0.62\t\n']形式 rows=len(lines)#文件行数 datamat=np.zeros((rows,8))#初始化矩阵 row=0 for line in lines: line=line.strip().split('\t')#strip()默认移除字符串首尾空格或换行符 datamat[row,:]=line[:] row+=1 return datamat#数值文本文件直接转换为矩阵数组形式方法三def text_read(filename): # Try to read a txt file and return a matrix.Return [] if there was a mistake. try: file = open(filename,'r') except IOError: error = [] return error content = file.readlines() rows=len(content)#文件行数 datamat=np.zeros((rows,8))#初始化矩阵 row_count=0 for i in range(rows): content[i] = content[i].strip().split('\t') datamat[row_count,:] = content[i][:] row_count+=1 file.close() return datamatif __name__ == '__main__': test_content = txt_strtonum_feed('preprocess1.txt') content = np.array(test_content) print content #矩阵数组形式 print '\n' print test_content #二维列表 data = txt_to_matrix(filename) print data out = text_read('preprocess1.txt') print out

    代码编译所得结果如下图所示(其中方法一思路是先得到动态二维数组,即二维列表的形式,最后在mian函数里使用np.arry()函数将其转换为数组形式,这里将两种形式结果都输出):


2、调用numpy中loadtxt()函数快速实现。(并且可以通过设定参数选取部分对应列数据载入数组,具体详细实践可以参考以下博文地址:https://www.cnblogs.com/hecc/p/8480532.html,具体结果可以就不展示)

import numpy as npimport osdata1=np.loadtxt('preprocess1.txt',delimiter='\t') #delimiter参数依据原始文本数据每行数字之间符号,这里为\tnp.savetxt('data3.txt',data1,fmt='%5.3f',delimiter='\t',newline=os.linesep) #将读取的文件保存到另一文本

二、CSV文件数据载入到数组

    在一些数据竞赛里面碰到很多的数据都是.csv文件给出的,说明应用应该还是有一些广泛。首先这里csv文件编码格式必须为UTF-8,否则会报编码错误信息。(txt转csv文件流程:打开excel—>数据—>导入文本/csv—>编码格式选择UTF-8—>保存选择csv格式)。csv文件打开如下所示:

    首先python内置了csv库,可以调用然后自己手动来写操作的代码,比较简单的csv文件读取载入到数组可以采用python的pandas库中的read_csv()函数来读取。其中函数的具体参数很长,在此忽略,详细参考专业api文档。这里代码实现及结果如下所示:

import numpy as npimport pandas as pdimport os#UTF-8编码格式csv文件数据读取df = pd.read_csv('preprocess.csv') #返回一个DataFrame的对象,这个是pandas的一个数据结构df.columns=['Col1','Col2','Col3','Col4','Col5','Col6','Col7','Col8']X = df[['Col1','Col2','Col3','Col4','Col5','Col6','Col7']] #抽取前七列作为训练数据的各属性值X = np.array(X)print Xy1 = df['Col8'] #最后一列作为每行对应的标签label#Y = df['Col8'].map(lambda y1:float(y1.rstrip(';')))Y = np.array(y1) print Y

三、mat文件数据载入到数组

    .mat文件是MATLAB存储数据的标准格式,很多的机器学习任务用.MAT来存出数据文件。python的scipy中有专门的函数来方便.mat的文件的载入和存储,具体函数如下所示,实现就一行代码这里就不展示了,可以自行参考其他资料。

scipy.io.loadmat(file_name, mdict=None, appendmat=True, **kwargs) #载入MATLAB文件#保存一个带有名称和序列的字典到.mat文件中scipy.io.savemat(file_name, mdict, appendmat=True, format=’5’, long_field_names=False, do_compression=False, oned_as=’row’)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多