Выставил отступы, причесал, сделал опции из командной строки.
# -*- coding: utf-8 -*-
import csv
import struct
import sys
def binary_to_csv(input_file, output_file, format_string):
with open(input_file, 'rb') as input_binary:
with open(output_file, 'w', newline='') as output_csv:
csv_writer = csv.writer(output_csv)
# Здесь нужно указать формат данных в бинарном файле
# и их соответствие столбцам CSV
# В данном примере считаем, что в файле хранятся два значения типа float
# и они должны быть записаны в два столбца CSV
## format_string = 'ff' # Пример формата: два значения типа float
## field_names = ['Value 1', 'Value 2'] # Названия столбцов CSV
## csv_writer.writerow(field_names)
chunk_size = struct.calcsize(format_string)
while True:
chunk = input_binary.read(chunk_size)
if not chunk:
break
values = struct.unpack(format_string, chunk)
csv_writer.writerow(values)
if len(sys.argv) <= 1 :
print( "Нужны аргументы: \r\n входной файл, выходной файл, строка формата");
print( "Формат (см. \'struct\'): \r\n\tb - signed char,\tB - unsigned char");
print( "\th - signed short,\tH - unsigned short");
print( "\tl - signed long,\tL - unsigned long");
print( "\tq - signed long long,\tQ - unsigned long long");
print( "\tf - float");
print( "\td - double");
print( "\tprefix: [\'<\'|\'>\'] - little endian, big endian");
sys.exit(0);
# normal continue
binary_to_csv( sys.argv[1], sys.argv[2], sys.argv[3] )