将文件夹及子文件夹中二进制bin文件每8个字节转浮点后转存到csv,csv放到命名为csv文件夹的目录下,并以bin文件的名字+原始文件这几个字命名,将bin文件按1、2、3的顺序分别放到csv的1、2、3列,将每一列的数据进行特征提取计算,包括均值、方差、rms、小波1~16,记录在另一个csv文件并以bin文件的名字+特征文件这几个字命名。
时间: 2024-04-13 16:30:09 浏览: 73
易语言字节集到二进制互转
以下是一个将文件夹及子文件夹中的二进制 BIN 文件转换为浮点数,并保存到 CSV 文件中的示例程序:
```python
import os
import struct
import csv
import numpy as np
import pywt
def convert_bin_to_float(bin_file_path):
with open(bin_file_path, 'rb') as bin_file:
bin_data = bin_file.read()
float_data = []
for i in range(0, len(bin_data), 8):
float_value = struct.unpack('d', bin_data[i:i+8])[0]
float_data.append(float_value)
return float_data
def save_to_csv(data, csv_file_path):
with open(csv_file_path, 'w', newline='') as csv_file:
writer = csv.writer(csv_file)
for row in data:
writer.writerow(row)
def calculate_features(float_values):
# 均值
mean = np.mean(float_values)
# 方差
variance = np.var(float_values)
# 均方根(RMS)
rms = np.sqrt(np.mean(np.square(float_values)))
# 小波变换
wavelet_features = []
levels = range(1, 17)
for level in levels:
coefficients = pywt.wavedec(float_values, 'db1', level=level)
for coeff in coefficients:
wavelet_features.append(coeff.mean())
wavelet_features.append(coeff.var())
wavelet_features.append(np.sqrt(np.mean(np.square(coeff))))
return mean, variance, rms, wavelet_features
# 指定包含二进制 BIN 文件的目录
directory = 'path/to/your/directory'
# 创建用于保存 CSV 文件的文件夹
csv_directory = os.path.join(directory, 'csv')
os.makedirs(csv_directory, exist_ok=True)
# 遍历目录中的文件夹和文件
for root, dirs, files in os.walk(directory):
for file in files:
if file.endswith(".bin"):
bin_file_path = os.path.join(root, file)
# 转换为浮点数
float_data = convert_bin_to_float(bin_file_path)
# 保存到 CSV 文件
csv_file_name = f"{file}_original.csv"
csv_file_path = os.path.join(csv_directory, csv_file_name)
save_to_csv(float_data, csv_file_path)
# 特征提取
mean, variance, rms, wavelet_features = calculate_features(float_data)
# 保存特征到 CSV 文件
feature_csv_file_name = f"{file}_features.csv"
feature_csv_file_path = os.path.join(csv_directory, feature_csv_file_name)
feature_data = [[mean], [variance], [rms]] + [wavelet_features]
save_to_csv(feature_data, feature_csv_file_path)
```
将上述代码中的 `'path/to/your/directory'` 替换为包含二进制 BIN 文件的目录路径。在这个示例程序中,我们假设你需要将该目录中的所有二进制 BIN 文件转换为浮点数,并保存到 CSV 文件中。
程序中,我们首先定义了两个辅助函数 `convert_bin_to_float` 和 `save_to_csv`。`convert_bin_to_float` 函数用于将二进制 BIN 文件转换为浮点数列表,其中使用了 `struct` 模块来解析二进制数据,并将浮点数存储在列表中。`save_to_csv` 函数用于将数据保存到 CSV 文件中。
接下来,我们遍历目录中的文件夹和文件,筛选出以 ".bin" 结尾的文件。对于每个 BIN 文件,我们首先调用 `convert_bin_to_float` 函数将其转换为浮点数列表。然后,我们使用 `save_to_csv` 函数将列表中的数据保存到 CSV 文件中,命名为原始文件名加上 "_original.csv"。
接着,我们调用 `calculate_features` 函数对浮点数列表进行特征提取,得到均值、方差、均方根和小波特征。然后,我们使用 `save_to_csv` 函数将特征数据保存到另一个 CSV 文件中,命名为原始文件名加上 "_features.csv"。
请确保你已经安装了 Python,并且导入了 os、struct、csv、numpy 和 pywt 模块。
阅读全文