Форум сайта python.su
0
Добрый вечер.
Помоги те плз., что я не так делаю?
Есть задача считать бинарные данные из файла и тут же их сохранить в десяичном формате в другом фаиле.
file=open('1.bin','rb')
data=file.readline(3)# b'\x9c\x1b\xfd' вот такие входные данные
#print ('data = ‘+str(data))
#print (str(data))
a = data
#print (int ((a),16))
print (a)
file=open(’11.txt','w')
file.writelines (str(a)) # и b'\x9c\x1b\xfd' точно те же данные сохраняются в выходном фаиле
file.close()
Офлайн
253
alexan1234:) ваша ошибка в том, что вам надо сначала выучить язык С. После этого посмотрите что делает модуль struct после того как с ним разберетесь, смотрите как пользоваться format.
что я не так делаю?
Отредактировано doza_and (Март 22, 2014 20:49:34)
Офлайн
0
Да. спасибо.
import struct
myfile = open(“1.bin”, “rb”)
data = myfile.read()
values = struct.unpack('>i4', data) # извлекаем данные
print (values)
Пробую так. получаю ошибку:
File “D
Python3.4.0/1.py”, line 4, in <module>
values = struct.unpack('>i4', data) # извлекаем данные
struct.error: repeat count given without format specifier
Подумываю, что необходим какойто файл-посредник, куда должны временно переписаться данные из 1.bin
верно?
Офлайн
253
alexan1234Сильно сомневаюсь в необходимости файла посредника.
что необходим какойто файл-посредник
>>> struct.unpack("2h",b' ') (8224, 8224)
Отредактировано doza_and (Март 23, 2014 20:18:23)
Офлайн
0
Проблем с чтением из бинарного файла не возникает.
with open(r“file.txt”, “rb”) as f:
for line in f:
print(repr(line))
Вот один из типичных примеров, приведенных в книге “Питон и разработка приложении” Н. Прохоренок.
Но отчего то, там вообще нет примеров с Struct. По обрывочным сведениям, я предположил что функции(??) типа HH, h, I, <,> и т.д. служат для обозначения способа записи/чтения бинарного файла.
Но вот конкретно, что они значат, найти не смог( .
Я пытаюсь открыть бинарный файл, созданный сторонней программой, в нем записан сигнал, несколько каналов. После открытия хочу его сохранить в соседнем файле, но уже в более понятной форме, .
Размер бинарного файла, до 3 Гб. Не знаю, много ли это..
Спасибо за подсказки.. Сейчас стан искать инфу по Traceback.
РС. Ссылка не кажет.. Наверно санкции))
Отредактировано alexan1234 (Март 24, 2014 20:36:14)
Офлайн
253
мда ссылка странная получилась. см http://docs.python.org/3/library/
Смотреть надо в документации а не только в книжках.
3 Гб довольно большой файл.
alexan1234Это в текстовой? Не советую, проблем с ним не оберешься. Я бы запихнул такие данные в hdf5 http://www.hdfgroup.org/HDF5/doc/RM/Tools.html#Tools-Import или в postgres в зависимости от того что с ними надо делать. Запихать можно и без питона.
но уже в более понятной форме
Офлайн
0
Спасибо.. буду читать в кривом гугле переводе)) У меня есть прибор.. и ПО к нему. поддерживать существующую программу, нет возможности. Поэтому я нашел аналог продвинутей, но он, аналог, не понимает мои формат записи. А он (мой формат, при открытии фаром) собственно выглядит так:
000000000: 9C 1B FD 33 C6 02 86 E4 FF 8D 11 FD A5 CF 02 46
000000010:b и тд. много много раз….
При чтении с помощью команды
file=open('1.bin','rb')
data=file.readline(300)
Я получаю файл с содержанием: b"\x9c\x1b\xfd3\xc6\x02\x86\xe4\xff\x8d\x11\xfd\xa5\xcf\x02F
Кстати, заметил странную вещщ.. 3 и 4 и последнии биты,как то не соответствуют друг другу(
еще один повод задуматься. Нету мыслей? возможно необходима команда decode (utf 8)?
Из этого мне надо получить:
Модуль чтения данных должен быть в виде DLL (предпочтительнее) или EXE
В модуль из вызывающей программы могут передаваться путь к карте памяти прибора или к папке в которую скопированы данные с карты, а также путь к папке куда сохранять преобразованные данные. В модуле также должно быть реализовано либо окно прогресса с кнопкой отмены процесса, либо механизм вызова callback функции прогресса. В последнем случае. из вызывающей программы в модуль передается указатель на функцию прогресса в виде
typedef bool (*TMyProgress)(int, bool*);
bool MyProgress(int percent, bool *chancel) – где
percent – процент считанных данных от 0 до 100
chancel – указатель на переменную в которую записывается True в случае отмены процесса пользователем.
Модуль во время считывания данных должен периодически вызывать MyProgress, передавая в нее процент прогресса и указатель на chancel. После вызова MyProgress и возврата в модуль он должен анализировать chancel и в случае True прерывать считывание.
Модуль чтения должен возвращать статус: 0 – считано успешно, 1 – отмена пользователем, 2 и более – код ошибки на ваше усмотрение (привести расшифровку кодов ошибки)
Нам было бы удобно увидеть данные в виде файлов в следующем виде:
Файлы данных:
Chanel1.dat
Chanel2.dat
Chanel3.dat
…..
Chanel8.dat
В каждом файле содержится запись по одному каналу в формате 32 бита со знаком (8 файлов для 12 канального прибора
Файл Accsel.dat данные акселерометра
PatientLabels.dat файл меток пациента когда нажимается кнопка события (каждая метка занимает 4 байта и соответствует моменту нажатия кнопки в отсчетах от начала записи).
Info.dat файл информации о приборе и параметрах записи (формат на ваше усмотрение) (должны быть серийный номер, количество каналов записи, акселерометр есть нет, дата и время начала записи (если есть), усиление для преобразования данных в мкВ, частота дискретизации, версия прибора).
Отредактировано alexan1234 (Март 26, 2014 17:42:48)
Офлайн
0
И, к слову.. Готов заплатить за реализацию))
Офлайн
857
alexan1234приведи пример входного файла и выходного файла, построенного по нему
Я пытаюсь открыть бинарный файл, созданный сторонней программой, в нем записан сигнал, несколько каналов. После открытия хочу его сохранить в соседнем файле, но уже в более понятной форме, .
вот так
alexan1234к двоичным данным кодировки никакого отношения не имеют
возможно необходима команда decode (utf 8)?
Отредактировано py.user.next (Март 26, 2014 19:27:42)
Офлайн
0
Пытаюсь приложить пример файла.
Там миандр. Частота дискртитизации 500 гц. На сколько я понял, 8 каналов. Но сам сигнал присутсвет только на первом канале. 24 бита на канал., помню слова разработчика)
Прикреплённый файлы:
ecg.bin (353,4 KБ)
Офлайн