1. 程式人生 > >python3 讀取txt、csv、mat檔案資料並存入array具體實現

python3 讀取txt、csv、mat檔案資料並存入array具體實現

1、讀取txt檔案

下面的程式碼中需要設定你讀取資料的陣列的維度資訊,如下

datamat = np.zeros((rows, 6))  #表示6列資料

# -*- coding: cp936 -*-
import re
import linecache
import numpy as np
import os

filename = 'preprocess1.txt'


# 數值文字檔案轉換為雙列表形式[[...],[...],[...]],即動態二維陣列
# 然後將雙列表形式通過numpy轉換為陣列矩陣形式

# 數值文字檔案直接轉換為矩陣陣列形式方法二
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, 6))  # 初始化矩陣

    row = 0
    for line in lines:
        line = line.strip().split('\t')  # strip()預設移除字串首尾空格或換行符
        print(line)
        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, 6))  # 初始化矩陣
    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 datamat


'''if __name__ == '__main__':
    filename = 'winedata.txt'
      # 二維列表
    data = txt_to_matrix(filename)
    print (data)
    print(data.__len__())
    #out = text_read('winedata.txt')
    #print(out)'''

2、讀取csv檔案

在python中內建了csv庫,通過呼叫相關函式即可實現檔案的讀取,將csv檔案讀取載入到陣列可以採用python的pandas庫中的read_csv()函式來讀取。具體實現如下:

import numpy as np
import pandas as pd
import os
 
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 X
 
y1 = df["Col8"] #最後一列作為每行對應的標籤label
Y = np.array(y1) 
print Y

3、mat檔案讀取

python的scipy中有專門的函式來方便.mat的檔案的載入和儲存,具體實現所示,

import scipy.io as sio
import numpy as np
 
###下面是講解python怎麼讀取.mat檔案以及怎麼處理得到的結果###
load_fn = 'xxx.mat'
load_data = sio.loadmat(load_fn)
load_matrix = load_data['matrix'] #假設檔案中存有字元變數是matrix,例如matlab中save(load_fn, 'matrix');當然可以儲存多個save(load_fn, 'matrix_x', 'matrix_y', ...);
load_matrix_row = load_matrix[0] #取了當時matlab中matrix的第一行,python中陣列行排列
 
###下面是講解python怎麼儲存.mat檔案供matlab程式使用###
save_fn = 'xxx.mat'
save_array = np.array([1,2,3,4])
sio.savemat(save_fn, {'array': save_array}) #和上面的一樣,存在了array變數的第一行
 
save_array_x = np.array([1,2,3,4])
save_array_y = np.array([5,6,7,8])
sio.savemat(save_fn, {'array_x': save_array_x, 'array_x': save_array_x}) #同理,只是存入了兩個不同的變數供使用