• python读写操作(txt, mat, xls, etc文件)


    这里简单总结python中对数据文件的简单读写操作。

    txt文件

    在numpy库中有很好的对txt文本文件进行操作的函数 [1],如下例:

    读取txt文件

    import numpy
    array = numpy.loadtxt('data_array.txt')
    

    如果data_array.txt是按照矩阵存放的文本文件,那么读出来的array就是和原文件结构一致的矩阵。

    写入txt文件

    同样可以使用numpy库中的函数将矩阵变量保存为文本文件 [2]。

    numpy.savetxt('array2D.txt', array_2D)
    

    npy格式高维矩阵的读写

    使用txt文本文件只能保存1或2维的矩阵,对于高于2维的矩阵可以使用.npy后缀的文件进行读写和保存 [3]。

    # save 3D/4D matrix to .npy files
    numpy.save('M3D.npy', M3D)
    numpy.save('M4D.npy', M4D)
    # load 3D/4D matrix from .npy file
    M3D_data = numpy.load('M3D.npy')
    M4D_data = numpy.load('M4D.npy')
    

    xls电子表格的读写

    xls格式的电子表格是Office系列办公软件常用的工作文件格式,可以在电子表格中灵活的储存丰富的有用数据。利用python可以配合office软件对其中的数据进行批量的自动操作,极大的提高数据分析的效率,节省宝贵的时间。

    读取xls电子表格

    读取xls电子表格内容的一种方式是调用xlrd库 [4]。

    user age
    Tom 20
    Jack 22
    Lily 18
    Jim 25
    Lucy 21
    ... ...

    假设你的电子表格内容如上表,那么读取代码可以是这样:

    import xlrd  # module to read .xlx files
    sheet_book = xlrd.open_workbook('sheetbook.xls')
    sheet1 = sheet_book.sheet_by_name('sheet1') 
    n_row = 24
    user_names = []
    user_ages = numpy.zeros(n_row)
    for i in range(0, n_row):
        # read user names
        user_names.append(sheet1.cell(i+1, 0).value)
        user_ages[i] = sheet1.cell(i+1, 1).value
    

    将n_row设为24就可以读取24行数据,也即24个人的姓名和年龄,并保存为python中的可以储存姓名的字符list和年龄的数组向量。

    写入xls电子表格

    如果直接读取xls表格是无法直接对其进行写入操作的,因为用xlrd读取的表格对象不包含保存为xls的函数。或许是为了防止覆盖原有数据,python中似乎无法对原表格中的数据进行替换和填充。如果要写入xls电子表格,有两种方式,一种是从零开始新建一个表格 [5],另一种方式是复制原表格的内容,进行修改后再保存为新的版本 [6]。

    新建表格并保存

    完全新建表格的示例代码如下:

    import xlwt
    workbook = xlwt.Workbook()
    sheet = workbook.add_sheet('test')
    for i in range(len(x_array)):
        sheet.write(0, i, x_array[i])
    workbook.save('testput.xls')
    

    复制原表格并修改保存副本

    在这个操作是原装的python可能会缺少响应的库,需要我们用pip进行手动安装 [6]。如果是linux/macOS的系统,打开终端键入下面命令即可,如果是windows电脑系统,应该可以使用powershell来安装吧?

    pip install xlutils
    

    下面的代码即示例对原表格复制后修改保存新副本的过程。

    # pip install xlutils
    y_array = numpy.linspace(1, 3, 100)
    from xlutils.copy import copy
    work_book = xlrd.open_workbook('testput.xls')
    # new_book = xlwt.add_sheet('newbook')
    new_book = copy(work_book)
    new_sheet = new_book.get_sheet('test')
    for i in range(len(y_array)):
        new_sheet.write(i, 0, y_array[i])    
    new_book.save('new_testput.xls')
    

    mat数据的读取

    .mat后缀的数据文件是matlab中保存复杂数据的一种格式,一般对于复杂的结构体数据多用这种格式进行储存。但是由于matlab昂贵的价格,一般商用中多使用python进行替代,国内外很多科研机构也逐渐用python对matlab进行替代,一般在经济能力有限的学生群体中比较流行用python替代matlab进行编程。有时迫不得已要用python对已有的.mat进行数据读取的操作,但是鉴于.mat格式保存数据的灵活性和复杂性,即便是下面的简单读取方法介绍仍然有可能不适用你手头的.mat数据。建议尽量用matlab打开和读取.mat数据,如果确实要在matlab和python之间交换数据,建议保存为.txt文本文件或者.xls或.csv格式的电子表格。简单的例子如下 [7]:

    import scipy.io
    mat_dic = scipy.io.loadmat('file.mat')
    # after this step, the mat_dic is a dictionary format file in pylab
    # to convert it to a ndarray, you need to get its value out
    mat_data = mat_dic['element1']
    

    上面展示的是用python读取一个保存为.mat格式的结构体,并将其中一个元素保存为数组变量。

    参考

    [1] https://docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html

    [2] https://docs.scipy.org/doc/numpy/reference/generated/numpy.savetxt.html

    [3] https://stackoverflow.com/questions/33697615/how-do-i-save-a-3d-python-numpy-array-as-a-text-file

    [4] https://stackoverflow.com/questions/2942889/reading-parsing-excel-xls-files-with-python

    [5] https://www.geeksforgeeks.org/writing-excel-sheet-using-python/

    [6] https://stackoverflow.com/questions/2725852/writing-to-existing-workbook-using-xlwt

    [7] http://scipy-cookbook.readthedocs.io/items/Reading_mat_files.html

  • 相关阅读:
    iOS初级博客的链接
    代理参数问题的思考
    数组里面的选择排序与起泡排序比较
    【C语言】02-函数
    【C语言】01-第一个c程序代码分析
    响应者链的事件分发
    UIController中view的记载流程
    UITabBar的定制
    CommandTabel_代理方法
    来到博客园
  • 原文地址:https://www.cnblogs.com/docnan/p/11638200.html
Copyright © 2020-2023  润新知