将文件夹子子文件夹中的zip文件内的bin文件解压缩,解压缩后将bin文件每8个字符转浮点后,按1、2、3的顺序写入csv的1、2、3列,以orginal后缀命名,在将bin转换后的数据中按1、2、3的顺序分别进行时域同步平均(TSA)处理,其中时域同步平均(TSA)处理的窗口可定义,变换后的数据写入新的csv中,以tsa后缀命名。
时间: 2024-04-15 19:28:53 浏览: 28
您可以使用以下Python代码来实现您的需求:
```python
import os
import csv
import struct
import zipfile
def extract_and_convert_zip_files(folder_path, output_folder):
for root, dirs, files in os.walk(folder_path):
for file in files:
if file.endswith(".zip"):
file_path = os.path.join(root, file)
extract_zip_files(file_path, output_folder)
def extract_zip_files(file_path, output_folder):
with zipfile.ZipFile(file_path, "r") as zip_file:
for file_info in zip_file.infolist():
if file_info.filename.endswith(".bin"):
bin_data = zip_file.read(file_info.filename)
output_file_name = os.path.splitext(file_info.filename)[0] + "_original.csv"
output_file_path = os.path.join(output_folder, output_file_name)
convert_binary_to_csv(bin_data, output_file_path)
perform_tsa_transform(output_file_path)
def convert_binary_to_csv(bin_data, output_file_path):
with open(output_file_path, "w", newline="") as csv_file:
csv_writer = csv.writer(csv_file)
csv_writer.writerow(["Column 1", "Column 2", "Column 3"])
pos = 0
while pos < len(bin_data):
binary_data = bin_data[pos:pos+8]
pos += 8
float_data = struct.unpack("fff", binary_data)
csv_writer.writerow(float_data)
def perform_tsa_transform(input_csv_file):
window_size = 3 # 设置TSA的窗口大小
output_csv_file = input_csv_file.replace("_original.csv", "_tsa.csv")
with open(input_csv_file, "r") as input_file, open(output_csv_file, "w", newline="") as output_file:
csv_reader = csv.reader(input_file)
csv_writer = csv.writer(output_file)
csv_writer.writerow(["Column 1", "Column 2", "Column 3"])
data_columns = [1, 2, 3] # 指定需要进行TSA处理的列
data = [[] for _ in data_columns]
for row in csv_reader:
for i, col in enumerate(data_columns):
data[i].append(float(row[col]))
if len(data[0]) == window_size:
transformed_data = perform_tsa_transform_window(data)
csv_writer.writerow(transformed_data)
for i in range(len(data)):
data[i].pop(0)
def perform_tsa_transform_window(data):
transformed_data = []
for i in range(len(data[0])):
window_data = [data[j][i] for j in range(len(data))]
transformed_data.append(sum(window_data) / len(window_data))
return transformed_data
# 指定文件夹路径和输出文件夹路径进行调用
extract_and_convert_zip_files("your_folder_path", "your_output_folder_path")
```
请替换代码中的 "your_folder_path" 和 "your_output_folder_path" 为您实际的文件夹路径和输出文件夹路径。
上述代码首先遍历指定的文件夹及其子文件夹,提取所有的ZIP文件,并解压缩其中的BIN文件。然后,将每个BIN文件中的数据转换为浮点数后,按照1、2、3的顺序写入对应的CSV文件中,并以"_original"后缀命名。
接下来,对每个原始CSV文件进行时域同步平均(TSA)处理,将指定列(1、2、3)的数据按窗口大小进行平均,并将平均后的数据写入新的CSV文件中,以"_tsa"后缀命名。
请注意,在 perform_tsa_transform_window 函数中,每个窗口的数据会按照1、2、3的顺序进行时域同步平均(TSA)处理。您可以根据需要调整变量 window_size 来定义TSA的窗口大小。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)