最近总是被师兄叫去处理实验数据。但是每次时间都花在了怎么加载文件,写文件上面了。因而在此写成模块,总结一下,之后就可以只写处理数据部分的内容了。
有库的话直接拿去跑就可以了。没安装库的,需要先安装 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文件闪退,看不到报错信息
运行结果: