Форум сайта python.su
0
Есть такой массив <message note_on channel=2 note=61 velocity=100 time=62>, <message note_on channel=2 note=61 velocity=0 time=58>.
Нужно убрать из него всё кроме цифр, каждая цифра должна стать элементом массива.
После нужно обратно вернуть текст к каждой цифре у цифр строгая последовательность поэтому к каждой i - ой цифре прикрепить соответсвующий текст.
Отредактировано Lainelir (Сен. 16, 2017 10:15:05)
Офлайн
35
Для начала…
import re pat = re.compile(r'<?(?P<name>[a-zA-Z_\s]+)\s?=\s?(?P<value>\d+)>?') data = ''' <message note_on channel=2 note=61 velocity=100 time=62>, <message note_on channel=2 note=61 velocity=0 time=58>''' print(pat.findall(data))
Офлайн
0
Вы видимо не правильно поняли. Это массив там тысячи таких элементов. Массив называется например massiv. Как их всех добавить в Data?
Офлайн
вы непонятно ставите вопрос.
data = '''<message note_on channel=2 note=61 velocity=100 time=62>, <message note_on channel=2 note=61 velocity=0 time=58>''' >>> out = [i.split() for i in data.split('\n') if i] >>> for i in out: tmp = [j.split('=') for j in i] print tmp [['<message'], ['note_on'], ['channel', '2'], ['note', '61'], ['velocity', '100'], ['time', '62>,']] [['<message'], ['note_on'], ['channel', '2'], ['note', '61'], ['velocity', '0'], ['time', '58>']] >>>
Офлайн
0
Этот массив это выгрузка нот.
Через append каждая нота становится членом массива y
[/y = [] messages = [] mid = MidiFile('Kovet.mid') for i, track in enumerate(mid.tracks): for msg in track: y.append(msg) print(y)] на выходе я имею [<meta message midi_port port=0 time=0>, <message sysex data=(126,127,9,1) time=0>, <meta message midi_port port=0 time=0>, <meta message time_signature numerator=4 denominator=4 clock... . мне нужен простой массив чисел из этого массива без букв почему то когда я использую на форуме квадратные скобочки текст исчезает.
Отредактировано Lainelir (Сен. 16, 2017 17:29:37)
Прикреплённый файлы:
er.txt (459 байт)
Офлайн
примерно так
data = '''<message note_on channel=2 note=61 velocity=100 time=62>, <message note_on channel=2 note=61 velocity=0 time=58>''' out = [i.split() for i in data.split(',') if i.strip()] for i in range(len(out)): l = [j.split('=') for j in out[i]] tmp = [j[1].replace('>','') for j in l if len(j) >1] out[i] = ','.join(tmp) for i in out: print i
import re data = '''<message note_on channel=2 note=61 velocity=100 time=62>, <message note_on channel=2 note=61 velocity=0 time=58>''' tmp = [i for i in data.split(',') if i.strip()] for i in tmp: t = re.sub('[^\d ]','',i) print t.split()
Отредактировано vic57 (Сен. 16, 2017 13:40:32)
Офлайн
0
Ввожу ваш код вместо даты подставляю массив получаю
Traceback (most recent call last):
File “C
Users/Александр/PycharmProjects/untitled1/nnmidi.py”, line 19, in <module>
tmp =
AttributeError: ‘list’ object has no attribute ‘split’
Офлайн
Lainelir
код в студию вместе с массивом
Офлайн
0
Выше я уже прикрепил txt файл
[/from mido import Message, MidiFile, MidiTrack import re import itertools y = [] messages = [] mid = MidiFile('Kovet.mid') for i, track in enumerate(mid.tracks): for msg in track: y.append(msg) print(y) >>>[<meta message midi_port port=0 time=0>, <message sysex data=(126,127,9,1) time=0>, <meta message midi_port port=0 time=0>, <meta message time_signature numerator=4 denominator=4 clocks_per_click=24 notated_32nd_notes_per_beat=8 time=0>, ..... массив оочень длинный]
Отредактировано Lainelir (Сен. 16, 2017 17:28:28)
Офлайн
568
Lainelir
Я вам еще месяц назад объяснил, как нужно размещать код на форуме
http://python.su/forum/topic/33369/?page=1#post-182524
и вы вроде как даже поняли
http://python.su/forum/topic/33369/?page=1#post-182530
еще раз вы разместите неотформатированный листинг и я начну удалять ваши сообщения
Отредактировано FishHook (Сен. 16, 2017 17:05:12)
Офлайн