Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 16, 2017 10:14:41

Lainelir
Зарегистрирован: 2017-08-15
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Убрать буквы из каждого элемента массива.

Есть такой массив <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)

Офлайн

#2 Сен. 16, 2017 11:17:26

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Убрать буквы из каждого элемента массива.

Для начала…

 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))

Офлайн

#3 Сен. 16, 2017 11:42:26

Lainelir
Зарегистрирован: 2017-08-15
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Убрать буквы из каждого элемента массива.

Вы видимо не правильно поняли. Это массив там тысячи таких элементов. Массив называется например massiv. Как их всех добавить в Data?

Офлайн

#4 Сен. 16, 2017 12:29:31

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Убрать буквы из каждого элемента массива.

вы непонятно ставите вопрос.

 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>']]
>>> 
так что-ли?

Офлайн

#5 Сен. 16, 2017 12:59:50

Lainelir
Зарегистрирован: 2017-08-15
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Убрать буквы из каждого элемента массива.

Этот массив это выгрузка нот.
Через 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)

Прикреплённый файлы:
attachment er.txt (459 байт)

Офлайн

#6 Сен. 16, 2017 13:28:12

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Убрать буквы из каждого элемента массива.

примерно так

 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)

Офлайн

#7 Сен. 16, 2017 15:48:27

Lainelir
Зарегистрирован: 2017-08-15
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Убрать буквы из каждого элемента массива.

Ввожу ваш код вместо даты подставляю массив получаю
Traceback (most recent call last):
File “CUsers/Александр/PycharmProjects/untitled1/nnmidi.py”, line 19, in <module>
tmp =
AttributeError: ‘list’ object has no attribute ‘split’

Офлайн

#8 Сен. 16, 2017 16:43:11

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Убрать буквы из каждого элемента массива.

Lainelir
код в студию вместе с массивом

Офлайн

#9 Сен. 16, 2017 17:00:19

Lainelir
Зарегистрирован: 2017-08-15
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Убрать буквы из каждого элемента массива.

Выше я уже прикрепил 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)

Офлайн

#10 Сен. 16, 2017 17:04:15

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Убрать буквы из каждого элемента массива.

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)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version