Найти - Пользователи
Полная версия: Чтение и запись в файл в другом формате
Начало » Python для новичков » Чтение и запись в файл в другом формате
1 2 3 4 5
alexan1234
А, да. вопрос небольшой. Кат сделать так, что бы данные в файле были столбиком?? Ну, не связываясь с “csv”.
py.user.next
alexan1234
values = struct.unpack('240B', data) #извлекаем данные
struct пока не нужен, данные читай через .read(3), где 3 - количество байт
struct используется тогда, когда надо набор байт рассмотреть как единое число (когда оно и было так представлено изначально)

судя по этому циклу, число составляется по частям
byte[] int_image = new byte[4];

for (int i = 0; i < hwinfo.Channels; i++) {

int_image[0] = read[3 * i];
int_image[1] = read[3 * i + 1];
int_image[2] = read[3 * i + 2];

if ((int_image[2] & 0x80) != 0)
int_image[3] = 0xFF;
else
int_image[3] = 0;
}

alexan1234
Кат сделать так, что бы данные в файле были столбиком?
нужен hex редактор
да, вроде, в Far'е есть такой режим (при просмотре F4 попробуй)
alexan1234
py.user.next
struct пока не нужен, данные читай через .read(3), где 3 - количество байт
struct используется тогда, когда надо набор байт рассмотреть как единое число (когда оно и было так представлено изначально)

судя по этому циклу, число составляется по частям
Значит, если я правильно понял, то сначала необходимо составить из трех чисел (баит) одно число, а затем, используя модуль struct, преобразовать баит в десятичное число?
Тоесть для первого канала: int_image = read берем каждое 3е число начиная с третьего.
второи канал: int_image = read тоже, берем каждое третье, но с 4 баита
третии: int_image = read; с пятого баита.
Дурацкии вопрос) сумма баитов, равна ли сумме десятичных чисел,??
Еше,
if ((int_image & 0x80) != 0)
int_image = 0xFF;
else
int_image = 0;

что это за блок условие?? Помогите расшифровать) Подозреваю, что это некии разделитель данных.
Возможно, здесь формируется знак? или запятая?
alexan1234
py.user.next
нужен hex редактор
да, вроде, в Far'е есть такой режим (при просмотре F4 попробуй)
это я спрашиваю, как мне в записываемом файле, числа расположить столбцом.Пробую “\n”
но ничего не выходит( версия питона 3,4
py.user.next
alexan1234
это я спрашиваю, как мне в записываемом файле, числа расположить столбцом
в двоичном режиме в винде \r\n

alexan1234
Значит, если я правильно понял, то сначала необходимо составить из трех чисел (баит) одно число
надо понять, как получается число -8.88271 из трёх байт
оно дробное - значит, что-то1 целое на что-то2 поделено
раз оно отрицательное, можно предположить, что это не корень

alexan1234
а затем, используя модуль struct, преобразовать баит в десятичное число?
сначала всё нужно проделать с калькулятором, чтобы понять алгоритм
alexan1234
Господа)!
Я почти добился успеха!
С помощью экселя и вот такого алгоритма :
import struct
#import csv
myfile = open(“ecg.bin”, “rb”)
data = myfile.read(1500)
#print (data)
values = struct.unpack('1500B', data) #извлекаем данные
print (values)


file=open('ecg1.txt','w')
S=values(13:1500:9])
file.writelines ('\r')
print (S) # каждое третье пишем в фаил
S1=str(S)
S2S1)

file.writelines((S1) + ‘S’ +str(0) +'\n')
#file.writelines ('\n')

file.close()


Я стал получать данные. Построил график по каждому 9му значению.

увидал свой меандр + наводка сетевая.
Но есть проблема.
2 134 228 255 141 17 253 165 207
2 70 229 255 247 21 253 188 203
2 174 229 255 230 31 253 72 194
2 74 229 255 250 43 253 42 183
2 229 228 255 231 60 253 51 167
2 88 228 255 168 70 253 28 157
2 197 226 255 120 66 253 33 160
2 207 225 255 87 56 253 67 169
2 179 225 255 32 46 253 68 178
2 183 225 255 180 30 253 68 192
2 206 225 255 87 21 253 66 201
2 205 226 255 145 26 253 42 197
2 207 227 255 188 36 253 86 188
2 88 228 255 244 48 253 96 177
2 65 228 255 127 66 253 51 161
2 13 228 255 159 76 253 27 151
2 42 227 255 76 72 253 94 154
2 29 226 255 147 62 253 242 162
2 237 225 255 225 51 253 165 172
2 224 225 255 30 36 253 255 185
2 205 225 255 84 27 253 79 195 107 17 0 227
2 212 226 255 58 32 253 62 191
2 250 227 255 195 41 253 240 182
2 61 228 255 53 54 253 168 171
2 21 228 255 87 71 253 246 155
2 236 227 255 140 81 253 243 145
2 207 226 255 71 77 253 27 149
2 191 225 255 78 68 253 16 157
2 168 225 255 188 57 253 132 166
2 207 225 255 206 42 253 13 180
2 239 225 255 38 33 253 92 189
2 32 227 255 239 37 253 240 185
2 39 228 255 146 47 253 35 177
2 61 228 255 25 60 253 239 165
2 110 228 255 49 77 253 139 150
2 125 228 255 148 87 253 62 140
2 99 227 255 30 84 253 17 143
2 193 226 255 226 74 253 171 151
2 14 227 255 196 64 253 228 160
2 104 227 255 138 50 253 60 174
2 142 227 255 34 41 253 106 183 132 17 0 48

Как видите, каждое 20я строчка, “выскакивают” данные с акселерометра (и они у меня есть)
В экселе, ручками, я подправил результаты, сдвинув вылезевшие значения.
Пример, последняя строка, справа были значения 41 253 106 183 , я их поменял местами с 132 17 0 48.
И так же выше.
Вообщем прибор мои пишет следующим образом, если смотреть на приложенную табличку, то слево на право,и сверху в низ. А изза того, что каждая 20 я строка имеет не 9 значений, а 13, то получается команда в питоне S=values([13:1500:9) создает мне не кондиционные данные. Каждая 20 строчка сьезжает.
Прошу помощи, какую команду в питоне использывать что бы читать первые 20 циклов по 9 значений, а 21 цикл считывать 13 значений. затем опять с 21 - 41 по 9 значений, а 42 опять 13 значений.
Надеюсь понятно описал проблемму.

py.user.next
alexan1234
values = struct.unpack('1500B', data) #извлекаем данные

они уже извлечены
>>> b = b'abcdefg'
>>> tuple(b)
(97, 98, 99, 100, 101, 102, 103)
>>>

обрати внимание на белый прямоугольник, в котором находится код
этот прямоугольник не даёт движку форума редактировать текст
ставится он в редакторе сообщений или пишется вручную

[code python][/code]    # так (для кода на питоне)
 
[code][/code]           # или так (для данных)

alexan1234
Надеюсь понятно описал проблемму.
ты сам не видишь, что код, который ты закинул, представляет из себя обрывки ?
его нужно передавать в тегах (в прямоугольнике) либо прикладывать к сообщению в виде файла


alexan1234
то получается команда в питоне S=values([13:1500:9) создает мне не кондиционные данные
написан обрывок кода какой-то
пиши точно
alexan1234
py.user.next
написан обрывок кода какой-то
пиши точно
Да, я вижу. Это форум не дает вставлять текст с квадратными скобками, вот так и изгаляюсь(
сейчас сижу, придумываю как записывать в файл с помощью цикла, но не простого, а с различным шагом.
Только подумал, а быть может и ненадо записывать в файл с циклом разным шагом? может считывать с файла лучше таким циклом?
хотя какая разница.. все равно пока не ясно как организовать такой цикл.
alexan1234
Да. еще приложу эксель файл. может кто глянет что получается.
первые 7 столбцов это экг сигнал в 7 отведениях. Он в свою очередь состоит из 3 независимых каналов.
В таблице они представлены как отведения 1,2 и С1. Остальные получаются путем мат преобразования.
с М по У столбцы, это собстевнно то, как на мои взгляд выглядят данные после преобразования и приведения к 9и столбцам.
py.user.next
alexan1234
Да, я вижу. Это форум не дает вставлять текст с квадратными скобками
lst[1:2:3]

alexan1234
первые 7 столбцов это экг сигнал в 7 отведениях
это тот csv-файл
как он получен ?

вот тут ты писал, какой файл нужно получить
а сейчас кладёшь какой-то другой файл
alexan1234
а. еще приложу эксель файл. может кто глянет что получается.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB