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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM