第33行报错:发生异常: error unpack requires a buffer of 12 bytes File "/Users/dingfengyan/工作/项目开发/哈理工/批量导出功能/binzcsv+feature.py", line 33, in convert_binary_to_csv float_data = struct.unpack("fff", binary_data) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/dingfengyan/工作/项目开发/哈理工/批量导出功能/binzcsv+feature.py", line 20, in extract_zip_files convert_binary_to_csv(bin_data, output_file_path) File "/Users/dingfengyan/工作/项目开发/哈理工/批量导出功能/binzcsv+feature.py", line 11, in extract_and_convert_zip_files extract_zip_files(file_path, output_folder) File "/Users/dingfengyan/工作/项目开发/哈理工/批量导出功能/binzcsv+feature.py", line 68, in <module> extract_and_convert_zip_files(currentPath, currentPath) struct.error: unpack requires a buffer of 12 bytes
时间: 2023-11-13 10:47:53 浏览: 295
这个错误是由于在第33行的 `struct.unpack` 函数中,指定的格式字符串 `"fff"` 要求输入的 `binary_data` 长度必须为 12 字节,但实际上 `binary_data` 的长度可能小于 12 字节。这可能是由于您的 BIN 文件的格式不符合预期导致的。
为了解决这个问题,您可以在调用 `struct.unpack` 之前,添加一些检查来确保 `binary_data` 的长度足够。以下是修改后的代码示例:
```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)
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):
if len(bin_data) - pos >= 12: # 检查剩余的数据是否足够
binary_data = bin_data[pos:pos+12] # 读取12字节数据
pos += 12
float_data = struct.unpack("fff", binary_data)
csv_writer.writerow(float_data)
else:
break # 如果剩余的数据不足12字节,跳出循环
# 指定文件夹路径和输出文件夹路径进行调用
extract_and_convert_zip_files("your_folder_path", "your_output_folder_path")
```
请将代码中的 "your_folder_path" 和 "your_output_folder_path" 替换为您实际的文件夹路径和输出文件夹路径。
在修改后的代码中,我们首先添加了一个检查,确保剩余的数据长度大于等于 12 字节才执行 `struct.unpack` 操作。如果剩余的数据长度不足 12 字节,就跳出循环,避免继续解析不完整的数据。
这样修改后,您应该能够处理 BIN 文件并将数据转换为 CSV 文件了。如果仍然遇到问题,请确保您的 BIN 文件的格式与代码中指定的结构一致,每个数据项都占用 4 字节。
阅读全文