将文件夹及子文件夹中二进制bin文件每8个字节转浮点后,按1、2、3的顺序分别放到csv的1、2、3列后转存到csv,csv放到命名为csv文件夹的目录下,并以bin文件的名字+原始文件这几个字命名,然后在将1、2、3列分别进行特征计算,包括均值、方差、rms、小波1~16,记录在另一个csv文件并以bin文件的名字+特征文件这几个字命名。

时间: 2024-04-13 22:30:41 浏览: 15
你可以使用 Python 的标准库和一些第三方库来完成这个任务。下面是一个示例代码,可以实现你的需求: ```python import os import csv import struct import numpy as np import pywt # 创建保存CSV文件的文件夹 csv_folder = "csv" if not os.path.exists(csv_folder): os.makedirs(csv_folder) # 遍历文件夹及子文件夹中的二进制bin文件 for root, dirs, files in os.walk(".", topdown=True): for filename in files: if filename.endswith(".bin"): # 构建CSV文件路径 bin_filepath = os.path.join(root, filename) csv_filename = f"{os.path.splitext(filename)[0]}_原始文件.csv" csv_filepath = os.path.join(csv_folder, csv_filename) # 打开二进制bin文件并读取数据 with open(bin_filepath, "rb") as bin_file: bin_data = bin_file.read() # 解析二进制数据并转换为浮点数 floats = [] for i in range(0, len(bin_data), 8): float_value = struct.unpack("d", bin_data[i:i+8])[0] floats.append(float_value) # 将数据按顺序分别放到1、2、3列并保存到CSV文件 with open(csv_filepath, "w", newline="") as csv_file: writer = csv.writer(csv_file) writer.writerow(["1", "2", "3"]) for i in range(0, len(floats), 3): row = [floats[i], floats[i+1], floats[i+2]] writer.writerow(row) # 计算特征并保存到特征文件 feature_filename = f"{os.path.splitext(filename)[0]}_特征文件.csv" feature_filepath = os.path.join(csv_folder, feature_filename) with open(feature_filepath, "w", newline="") as feature_file: writer = csv.writer(feature_file) writer.writerow(["均值", "方差", "rms"] + [f"小波{i}" for i in range(1, 17)]) # 计算特征 data = np.array(floats) mean = np.mean(data) variance = np.var(data) rms = np.sqrt(np.mean(np.square(data))) wavelet_coeffs = pywt.wavedec(data, "db4", level=16) # 将特征写入CSV文件 writer.writerow([mean, variance, rms] + list(wavelet_coeffs)) ``` 这段代码会遍历当前目录及其子目录中的二进制bin文件,将每8个字节转换为浮点数,并将其按顺序放到CSV文件的1、2、3列。然后,它会计算这些数据的均值、方差、rms和小波变换系数,并将这些特征保存到另一个CSV文件中。最后,所有生成的CSV文件都会保存在一个名为"csv"的文件夹中。

相关推荐

最新推荐

recommend-type

利用Java读取二进制文件实例详解

主要给大家介绍了利用Java读取二进制文件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用java具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
recommend-type

SQL Server中实现二进制与字符类型之间的数据转换

在SQL Server 数据库中,如何实现二进制数据与字符串数据之间的直接转换
recommend-type

利用verilog将二进制码转换为十进制BCD码

为方便读者学习,本文小编给读者提供了用verilog将二进制码转换为十进制BCD码的程序设计方法,供读者参考。
recommend-type

HttpClient Post 二进制/字节流/byte[]实例代码

主要介绍了 HttpClient Post 二进制/字节流/byte[]实例代码的相关资料,需要的朋友可以参考下
recommend-type

Android 实现图片转二进制流及二进制转字符串

主要介绍了Android 实现图片转二进制流及二进制转字符串,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用 Python 画一个可以动的爱心

好的,我可以帮助您使用Python来绘制一个动态的爱心。您可以使用turtle库来实现。以下是实现代码: ```python import turtle import math # 设置画布和画笔 canvas = turtle.Screen() canvas.bgcolor("black") pencil = turtle.Turtle() pencil.speed(0) pencil.color("red", "pink") pencil.pensize(3) # 定义爱心函数 def draw_love(heart_size, x_offset=0, y_offset=0):
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。