Выставил отступы, причесал, сделал опции из командной строки.
# -*- 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] )