[Python工具]-批量处理excel数据
目录
任务说明
软件设计
效果
参考文献
任务说明
在data的文件夹下又众多子文件夹,如图:
在利用机器学习的分类前需要对所有数据进行整合存在一个文件中,并且需要将距离分割出来作为特征之一,将波形和噪声分别作为labels(二分类问题);
软件设计
目标功能
- 功能一:读取文件数据
- 功能二:向excel写数据(并保证原数据不丢失)
- 功能三:遍历所有的文件夹
- 功能四:对文件名进行切割,提取出距离,根据文件名对数据添加标签;
import os
import xlrd
import xlwt
from os import listdir
from xlutils.copy import copy
from xlrd import open_workbook
from math import log
import re# xpath是数据存放的路径
xpath="F:/RJ/dataProcess/data"
#这个是最后存数据用的文件
savefile = '4.xls'#列出目录下所有文件
def list_all_files(rootdir):_files = []# subName = []# listdir返回指定文件夹包含的文件或文件夹名称的列表list = os.listdir(rootdir) #列出文件夹下所有的目录与文件for i in range(0,len(list)):# join函数作用是把目录和文件名合成一个路径,os.path中有split函数可以将路径和文件名称分隔开path = os.path.join(rootdir, list[i])# 注意append和extend的区别# isdir判断是否为路径,isfile判断是否为文件if os.path.isdir(path):_files.extend(list_all_files(path))if os.path.isfile(path):_files.append(path)return _files#设置excel样式
def set_style(name,height,bold=False):style = xlwt.XFStyle()font = xlwt.Font()font.name = namefont.bold = boldfont.color_index = 4font.height = heightstyle.font = fontreturn style# 使用xlwt进行写excel但是发现
#xlwt只能创建一个全新的文件重新写入内容保存,没有办法在保留原数据基础上增加数据
# 所以这里只用来写了一个特征行,即第一行
def write_excel():f = xlwt.Workbook()sheet1 = f.add_sheet('data', cell_overwrite_ok=True)row0 = ["最大值(正峰)", "最小值(负峰)", "峰峰值", "均值(算术平均)", "方差", "峰度", "偏斜度", "时域能量", "频域能量", "均方根",\"频段内能量(10-50)", "频段内能量(51-100)", "距离", "label"]#写第一行for i in range(0,len(row0)):sheet1.write(0, i, row0[i], set_style('Times New Roman',220,True))# for i in range(1, 5):# for j in range(12):# sheet1.write(i, j, 3)f.save(savefile)#为了弥补xlwt的缺陷重新引入一个函数库
#用xlutils修改文件
def add_excel(rowIndex, data, file):rexcel = open_workbook(file)# rowsNum = rexcel.sheets()[0].nclosexcel = copy(rexcel)sheet = excel.get_sheet(0)for i in range(len(data)):sheet.write(rowIndex, i, data[i])excel.save(file)#获取下一级目录所有的名称和路径,和文件路径
# 用于方法一的设计,没有一次性遍历所有,这样在出现多级目录的情况下需要多次调用该函数
def getSubfolder(rootdir):subName = []subpath = []subfile = []FileList = listdir(rootdir)m = len(FileList)for i in range(m):path = os.path.join(rootdir, FileList[i])subName.append(FileList[i])if os.path.isdir(path):subpath.append(path)if os.path.isfile(path):subfile.append(path)return subName, subpath, subfile#读取excel中的数据
def read_excel(file):outData = []#存储了所有合并单元格的数据,因为特征名字也合并了,所以也在这里outClo1 = []#用于返回的数据outCloLog = []#进过log处理后用于返回的数据wb = xlrd.open_workbook(file)sheet1 = wb.sheet_by_index(0)#处理合并单元格的问题merge = []for (rlow, rhigh, clow, chogh) in sheet1.merged_cells:merge.append((rlow, clow))# !!!注意在这里做了一个排序,因为在输出的过程中发现是乱序的,为了保持和原有表格的一致性,将出现的序号排序再读取merge = sorted(merge)for index in merge:outData.append(sheet1.cell_value(index[0], index[1]))for data in outData:if type(data).__name__ == 'float':#因为数据值为float型,所以根据类型将数据提取出来#将第一列的数据单独提出来计算(从0开始)#转换成了log函数处理outClo1.append(data)outCloLog.append(log(abs(data), 2))# print(outClo1)return outClo1if __name__ == '__main__':z = "噪声"# 方法一:依次读取下一级文件夹的方式# rowIndex = 0#用于记录所写过的行数# subName, subpath, subfile = getSubfolder(xpath)#第一级目录读取,存放了下一级文件夹名称,路径,和子文件名称(这里subfile是空)# write_excel()# #处理每个子文件夹# for j in range(len(subpath)):# print(subpath[j])# subName1, subpath1, subfile1 = getSubfolder(subpath[j])# #处理子文件夹中的所有文件# for i in range(len(subfile1)):# print(subfile1[i])#这里添加一个打印文件名的原因是判断读取数据的顺序,对比最后的写入文件# # 提取出来距离,这里用到的是正则表达式的知识# distance = re.sub("\D", "", subfile1[i].split('\\')[-2])# # 读取一个文件的数据,并将距离特征添加上# colsData = read_excel(subfile1[i])# if distance != '':#这里加一个判断的原因是环境噪声文件里面是''# colsData.append(int(distance))#因为这里distance解析出来后是str# # 判断是噪声文件还是波形文件,写入labels# if z in subfile1[i].split('\\')[-1]:# colsData.append(0)# else:# colsData.append(1)# # 每读取一个子文件夹后添加一个行数,避免写的过程中出现重叠的情况# add_excel(rowIndex+i+1, colsData, savefile)# rowIndex = rowIndex + len(subfile1)# 方法二:一次性遍历,依次处理子文件,而不是子文件夹write_excel()file = list_all_files(xpath)for i in range(len(file)):print(file[i])#与上同理,核对读写顺序distance = re.sub("\D", "", file[i].split('\\')[-2])colsData = read_excel(file[i])if distance != '': # 这里加一个判断的原因是环境噪声文件里面是''colsData.append(int(distance)) # 因为这里distance解析出来后是strif z in file[i].split('\\')[-1]:colsData.append(0)else:colsData.append(1)# 这里是一次性读写文件,所以直接用i记录即可,+1是因为第一行用来放名称了add_excel(i + 1, colsData, savefile)
效果
完成了对于数据的转移;
参考文献
python中os.path()模块:Python os.path 模块 | 菜鸟教程
Python遍历文件夹下的所有文件:python 遍历目录(包括子目录)下所有文件_一些和风旭日的日子的博客-CSDN博客
追加excel数据:Python读写/追加excel文件Demo_孔天逸的博客-CSDN博客
python中正则表达式的使用:Python 正则表达式 | 菜鸟教程
[Python工具]-批量处理excel数据相关推荐
- python处理大量excel数据-python如何批量处理excel数据?
python如何批量处理excel数据? python批量处理excel数据的方法: excel的内容需要有规律,python才能按顺序读取出来. 比如按行按列读取. 一.安装xlrd模块 到pyth ...
- python怎么批量处理数据_python如何批量处理excel数据?_后端开发
php赋值运算符有哪些_后端开发 php赋值运算符有:1.[=]赋值运算符:2.[+=]加运算符:3.[-=]减运算符:4.[*=]乘运算符:5.[/=]除运算符:6.[.=]连接字符运算符:7.[% ...
- python 调用HEG工具批量处理modis数据将hdf转为tif
python 调用HEG工具批量处理modis数据将hdf转为tif 搞了2.3天才搞定,在这里做个记录,希望 可以帮到需要的朋友. HEG工具安装需要的准备工作: 一.. JAVA安装. 电脑上没有 ...
- python modis数据拼接_python调用HEG工具批量处理MODIS数据的方法及注意事项
下面的代码主要用于使用python语言调用NASA官方的MODIS处理工具HEG进行投影坐标转换与重采样批量处理 主要参考 HEG的用户手册:https://newsroom.gsfc.nasa.go ...
- python批处理工具_python调用HEG工具批量处理MODIS数据的方法及注意事项
下面的代码主要用于使用python语言调用NASA官方的MODIS处理工具HEG进行投影坐标转换与重采样批量处理 主要参考 HEG的用户手册:https://newsroom.gsfc.nasa.go ...
- 如何利用Python编程批量处理Excel来提高日常工作效率!
最近的工作遇到一个需求,整理多个相同格式但是不标准的Excel表格,最终汇总成一个Excel表格,并进行数据透视分析. 表格内涉及到合并的单元格,不同表格表头位置有偏差等问题.目标是将所有表格内容相同 ...
- 利用Pajek软件批量处理excel数据,批量生成网络关系图
利用Pajek软件批量处理excel数据,批量生成网络关系图 Pajek软件大家想必都不陌生,但是我很陌生,因为我用它不是进行网络分析,而是用它来画关系图(类似网络图).但是Pajek软件手工操作时一 ...
- python导入excel数据-Python导入数值型Excel数据并生成矩阵操作
riginal_Data 因为程序是为了实现对纯数值型Excel文档进行导入并生成矩阵,因此有必要对第五列文本值进行删除处理. Import_Data import numpy as np impor ...
- python将excel数据合并_Python语言之Python合并多个Excel数据
本文主要向大家介绍了Python语言之Python合并多个Excel数据,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 安装模块 1.找到对应的模块 http://www.pyt ...
最新文章
- 码书:入门中文NLP必备干货:5分钟看懂“结巴”分词(Jieba)
- 区块链100讲:区块链中的随机数
- Visual Studio 2017最新版正式发布!适用于任何开发人员、平台及APP丨附下载
- 相关系数excel_跟着思想学外汇-如何用Excel计算货币相关性
- Windows系统调用学习笔记(一)—— API函数调用过程
- 如何建立分类模型matlab,创建简单模型
- MATLAB Simulink
- MathWorks 中国
- mysql数据库事件不执行_如何查看mysql事件是否执行
- 51 Nod 1027 大数乘法【Java大数乱搞】
- dateformat线程_Java最佳实践–多线程环境中的DateFormat
- 网页转图片 java_java-网页转图片
- 软件工程-第二次作业-例行报告
- 5G(2)---NR协议栈及功能1 - 总体架构与物理层
- Impala之DDL、DML
- 【王道计组笔记】Cache高速缓存基本工作原理
- ElementUI:navmenu导航中,开启vue-router 的模式后,点击触发事件而不进行路由跳转
- 关于嘉立创的贴片小总结
- 财报只是其中的一个因素
- 免费idc公益接口_数据科学促进社会公益免费开放数据的最佳来源
- 简单电脑版微信双开方法多开bat分身代码教程
- 【Mo 人工智能技术博客】基于耦合网络的推荐系统
热门文章
- html中文本两端对齐的属性,text-algin:justify实现文本两端对齐方法小结
- 设计模式其实很简单之行为型模式
- 项目三 配置与应用远程连接服务
- 前端开发学习--登录和注册页面设计(html和css,可完成两个页面点击切换)
- JavaScript网页设计:用户注册页面
- [Unity 3D] 重力感应与罗盘(一)
- 多线程--->守护线程
- 三星手机android 6.0,三星手机首批可升Android 6.0机型确认
- 利用非递归遍历统计二叉树的结点数
- C++ 反汇编/栈帧