目录

任务说明

软件设计

效果

参考文献


任务说明

在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数据相关推荐

  1. python处理大量excel数据-python如何批量处理excel数据?

    python如何批量处理excel数据? python批量处理excel数据的方法: excel的内容需要有规律,python才能按顺序读取出来. 比如按行按列读取. 一.安装xlrd模块 到pyth ...

  2. python怎么批量处理数据_python如何批量处理excel数据?_后端开发

    php赋值运算符有哪些_后端开发 php赋值运算符有:1.[=]赋值运算符:2.[+=]加运算符:3.[-=]减运算符:4.[*=]乘运算符:5.[/=]除运算符:6.[.=]连接字符运算符:7.[% ...

  3. python 调用HEG工具批量处理modis数据将hdf转为tif

    python 调用HEG工具批量处理modis数据将hdf转为tif 搞了2.3天才搞定,在这里做个记录,希望 可以帮到需要的朋友. HEG工具安装需要的准备工作: 一.. JAVA安装. 电脑上没有 ...

  4. python modis数据拼接_python调用HEG工具批量处理MODIS数据的方法及注意事项

    下面的代码主要用于使用python语言调用NASA官方的MODIS处理工具HEG进行投影坐标转换与重采样批量处理 主要参考 HEG的用户手册:https://newsroom.gsfc.nasa.go ...

  5. python批处理工具_python调用HEG工具批量处理MODIS数据的方法及注意事项

    下面的代码主要用于使用python语言调用NASA官方的MODIS处理工具HEG进行投影坐标转换与重采样批量处理 主要参考 HEG的用户手册:https://newsroom.gsfc.nasa.go ...

  6. 如何利用Python编程批量处理Excel来提高日常工作效率!

    最近的工作遇到一个需求,整理多个相同格式但是不标准的Excel表格,最终汇总成一个Excel表格,并进行数据透视分析. 表格内涉及到合并的单元格,不同表格表头位置有偏差等问题.目标是将所有表格内容相同 ...

  7. 利用Pajek软件批量处理excel数据,批量生成网络关系图

    利用Pajek软件批量处理excel数据,批量生成网络关系图 Pajek软件大家想必都不陌生,但是我很陌生,因为我用它不是进行网络分析,而是用它来画关系图(类似网络图).但是Pajek软件手工操作时一 ...

  8. python导入excel数据-Python导入数值型Excel数据并生成矩阵操作

    riginal_Data 因为程序是为了实现对纯数值型Excel文档进行导入并生成矩阵,因此有必要对第五列文本值进行删除处理. Import_Data import numpy as np impor ...

  9. python将excel数据合并_Python语言之Python合并多个Excel数据

    本文主要向大家介绍了Python语言之Python合并多个Excel数据,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 安装模块 1.找到对应的模块 http://www.pyt ...

最新文章

  1. 码书:入门中文NLP必备干货:5分钟看懂“结巴”分词(Jieba)
  2. 区块链100讲:区块链中的随机数
  3. Visual Studio 2017最新版正式发布!适用于任何开发人员、平台及APP丨附下载
  4. 相关系数excel_跟着思想学外汇-如何用Excel计算货币相关性
  5. Windows系统调用学习笔记(一)—— API函数调用过程
  6. 如何建立分类模型matlab,创建简单模型 - MATLAB Simulink - MathWorks 中国
  7. mysql数据库事件不执行_如何查看mysql事件是否执行
  8. 51 Nod 1027 大数乘法【Java大数乱搞】
  9. dateformat线程_Java最佳实践–多线程环境中的DateFormat
  10. 网页转图片 java_java-网页转图片
  11. 软件工程-第二次作业-例行报告
  12. 5G(2)---NR协议栈及功能1 - 总体架构与物理层
  13. Impala之DDL、DML
  14. 【王道计组笔记】Cache高速缓存基本工作原理
  15. ElementUI:navmenu导航中,开启vue-router 的模式后,点击触发事件而不进行路由跳转
  16. 关于嘉立创的贴片小总结
  17. 财报只是其中的一个因素
  18. 免费idc公益接口_数据科学促进社会公益免费开放数据的最佳来源
  19. 简单电脑版微信双开方法多开bat分身代码教程
  20. 【Mo 人工智能技术博客】基于耦合网络的推荐系统

热门文章

  1. html中文本两端对齐的属性,text-algin:justify实现文本两端对齐方法小结
  2. 设计模式其实很简单之行为型模式
  3. 项目三 配置与应用远程连接服务
  4. 前端开发学习--登录和注册页面设计(html和css,可完成两个页面点击切换)
  5. JavaScript网页设计:用户注册页面
  6. [Unity 3D] 重力感应与罗盘(一)
  7. 多线程--->守护线程
  8. 三星手机android 6.0,三星手机首批可升Android 6.0机型确认
  9. 利用非递归遍历统计二叉树的结点数
  10. C++ 反汇编/栈帧