Уведомления

Группа в Telegram: @pythonsu

#1 Март 22, 2014 20:18:41

alexan1234
Зарегистрирован: 2014-03-22
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение и запись в файл в другом формате

Добрый вечер.
Помоги те плз., что я не так делаю?
Есть задача считать бинарные данные из файла и тут же их сохранить в десяичном формате в другом фаиле.
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()

Офлайн

#2 Март 22, 2014 20:47:02

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Чтение и запись в файл в другом формате

alexan1234
что я не так делаю?
:) ваша ошибка в том, что вам надо сначала выучить язык С. После этого посмотрите что делает модуль struct после того как с ним разберетесь, смотрите как пользоваться format.
Мне кажется пока ваших знаний не хватает не только на решение а и на постановку задачи.

Всячески желаю вам успеха!!!



Отредактировано doza_and (Март 22, 2014 20:49:34)

Офлайн

#3 Март 23, 2014 18:10:54

alexan1234
Зарегистрирован: 2014-03-22
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение и запись в файл в другом формате

Да. спасибо.

import struct
myfile = open(“1.bin”, “rb”)
data = myfile.read()
values = struct.unpack('>i4', data) # извлекаем данные
print (values)

Пробую так. получаю ошибку:
File “DPython3.4.0/1.py”, line 4, in <module>
values = struct.unpack('>i4', data) # извлекаем данные
struct.error: repeat count given without format specifier

Подумываю, что необходим какойто файл-посредник, куда должны временно переписаться данные из 1.bin
верно?

Офлайн

#4 Март 23, 2014 20:14:45

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Чтение и запись в файл в другом формате

alexan1234
что необходим какойто файл-посредник
Сильно сомневаюсь в необходимости файла посредника.
чтобы понять в чем ошибка достаточно повнимательней прочитать traceback
>>> struct.unpack("2h",b'    ')
(8224, 8224)
Еще документацию читайте по 3 питону а не по второму http://docs.python.org/3/library/struct.html.

Есть много путей прочитать двоичные данные. Если данных не очень много struct. Если сложные структуры то ctypes Если много массивов многомерных то numpy.



Отредактировано doza_and (Март 23, 2014 20:18:23)

Офлайн

#5 Март 24, 2014 19:29:59

alexan1234
Зарегистрирован: 2014-03-22
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение и запись в файл в другом формате

Проблем с чтением из бинарного файла не возникает.
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)

Офлайн

#6 Март 24, 2014 21:05:54

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Чтение и запись в файл в другом формате

мда ссылка странная получилась. см http://docs.python.org/3/library/
Смотреть надо в документации а не только в книжках.
3 Гб довольно большой файл.

alexan1234
но уже в более понятной форме
Это в текстовой? Не советую, проблем с ним не оберешься. Я бы запихнул такие данные в hdf5 http://www.hdfgroup.org/HDF5/doc/RM/Tools.html#Tools-Import или в postgres в зависимости от того что с ними надо делать. Запихать можно и без питона.



Офлайн

#7 Март 26, 2014 17:38:47

alexan1234
Зарегистрирован: 2014-03-22
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение и запись в файл в другом формате

Спасибо.. буду читать в кривом гугле переводе)) У меня есть прибор.. и ПО к нему. поддерживать существующую программу, нет возможности. Поэтому я нашел аналог продвинутей, но он, аналог, не понимает мои формат записи. А он (мой формат, при открытии фаром) собственно выглядит так:

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)

Офлайн

#8 Март 26, 2014 17:44:39

alexan1234
Зарегистрирован: 2014-03-22
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение и запись в файл в другом формате

И, к слову.. Готов заплатить за реализацию))

Офлайн

#9 Март 26, 2014 19:26:05

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Чтение и запись в файл в другом формате

alexan1234
Я пытаюсь открыть бинарный файл, созданный сторонней программой, в нем записан сигнал, несколько каналов. После открытия хочу его сохранить в соседнем файле, но уже в более понятной форме, .
приведи пример входного файла и выходного файла, построенного по нему
возьми пару записей и преобразуй их
оборачивай в теги

вот так

alexan1234
возможно необходима команда decode (utf 8)?
к двоичным данным кодировки никакого отношения не имеют



Отредактировано py.user.next (Март 26, 2014 19:27:42)

Офлайн

#10 Март 26, 2014 19:38:27

alexan1234
Зарегистрирован: 2014-03-22
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение и запись в файл в другом формате

Пытаюсь приложить пример файла.
Там миандр. Частота дискртитизации 500 гц. На сколько я понял, 8 каналов. Но сам сигнал присутсвет только на первом канале. 24 бита на канал., помню слова разработчика)

Прикреплённый файлы:
attachment ecg.bin (353,4 KБ)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version