将excel或是csv文件中的矩阵相乘,输出点乘后的excel文件

最近总是被师兄叫去处理实验数据。但是每次时间都花在了怎么加载文件,写文件上面了。因而在此写成模块,总结一下,之后就可以只写处理数据部分的内容了。

有库的话直接拿去跑就可以了。没安装库的,需要先安装 pandas、xrld、xlwt、numpy库

加载excel或者csv文件为一个矩阵的功能,各自单独写了一个函数。可以根据自己的需要修改。

函数功能汇总:
加载excel文件为矩阵
加载csv文件为矩阵
在当前列表中加载所有的csv、excel文件
创建result文件夹
将得到的矩阵结果写入excel文件

加载其它文件为矩阵,也可以在这个基础上进行扩展。自动搜索当前文件夹中的文件进行处理。

当前的业务部分是在main函数中标识出来了:
自动搜索当前文件夹中的csv文件或者是excel文件,将它们读取为两个矩阵。将它们相乘后,得到的矩阵输出为excel文件
由于只是两个矩阵相乘,所以只能,也必须是刚好两个文件夹,才会有结果。同时矩阵也要满足左边矩阵的列和右边矩阵的行相等这一基础规则才有结果。
自己也可以换成相加,相除等。

import pandas as pd
import numpy as np

shuoming='自动搜索当前文件夹中的csv文件或者是excel文件,将它们读取为两个矩阵。将它们相乘后,得到的矩阵输出为excel文件\n由于只是两个矩阵相乘,所以只能,也必须是刚好两个文件夹,才会有结果。同时矩阵也要满足左边矩阵的列和右边矩阵的行相等这一基础规则才有结果'
print(shuoming)

#这里是详细的各种文件的加载方式
def load_excel(path):
    data=[]
    data = pd.read_excel(path,header=None)
    data = data.values
    # print(data)
    return data

def load_csv(path):
    data=[]
    data_read = pd.read_csv(path,header=None)
    list = data_read.values.tolist()
    data = np.array(list)
    # print(data.shape)
    # print(data)
    return data

#这里汇总加载不同的文件。拓展,把load具体的文件加上,再把这里的load加上。
#加载列表中的指定的文件
def load(path):
    pl=path.split('.')
    if pl[len(pl)-1]=='csv':
        data=load_csv(path)
    if pl[len(pl)-1]=='xlsx':
        data=load_excel(path)
    return data

#这里保存为xlsx文件
def save(path,result):
    if not os.path.exists('result'):
        os.mkdir('result')
    path='./result/'+path
    print(path)
    writer = pd.ExcelWriter(path)
    df = pd.DataFrame(result)
    df.to_excel(writer,index=False,header=None) # float_format 控制精度
    writer.save()

import os
def search_current_dir(t):
    a=os.listdir()
    file_name=[]
    for s in t:
        for j in a:
            temp=os.path.splitext(j)
            if temp[len(temp)-1]==s:
                file_name.append(j)
    print(file_name)
    return file_name



if __name__ == '__main__':
    filetype=['.csv','.xlsx']#约定加载文件的类型格式
    file_path=search_current_dir(filetype)
    matdata=[]
    for path in file_path:
        matdata.append(load(path))

    #主要的修改区域,业务区域    
    #当不清楚需求的时候,就是我全都要。两套方案都要写一遍。也不跟你约定太多了。这样各取所需。
    if matdata[0].shape[1]==matdata[1].shape[0]:
        str=file_path[0].split('.')[0]+'----'+file_path[1].split('.')[0]+'.xlsx'
        print(file_path[0]+'*'+file_path[1]+':')
        result=np.dot(matdata[0],matdata[1])
        save(str,result)
    if matdata[1].shape[1]==matdata[0].shape[0]:
        str=file_path[1].split('.')[0]+'----'+file_path[0].split('.')[0]+'.xlsx'
        print(file_path[1]+'*'+file_path[0]+':')
        result=np.dot(matdata[1],matdata[0])
        save(str,result)


    os.system('pause')#出现异常时,避免打包的exe文件闪退,看不到报错信息

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值