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

原文地址:https://www.cnblogs.com/docnan/p/11638200.html