Найти - Пользователи
Полная версия: Убрать буквы из каждого элемента массива.
Начало » Python для новичков » Убрать буквы из каждого элемента массива.
1 2
Lainelir
Есть такой массив <message note_on channel=2 note=61 velocity=100 time=62>, <message note_on channel=2 note=61 velocity=0 time=58>.
Нужно убрать из него всё кроме цифр, каждая цифра должна стать элементом массива.
После нужно обратно вернуть текст к каждой цифре у цифр строгая последовательность поэтому к каждой i - ой цифре прикрепить соответсвующий текст.
scidam
Для начала…
 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))
Lainelir
Вы видимо не правильно поняли. Это массив там тысячи таких элементов. Массив называется например massiv. Как их всех добавить в Data?
vic57
вы непонятно ставите вопрос.
 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>']]
>>> 
так что-ли?
Lainelir
Этот массив это выгрузка нот.
Через 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...
.
мне нужен простой массив чисел из этого массива без букв почему то когда я использую на форуме квадратные скобочки текст исчезает.
vic57
примерно так
 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()
Lainelir
Ввожу ваш код вместо даты подставляю массив получаю
Traceback (most recent call last):
File “CUsers/Александр/PycharmProjects/untitled1/nnmidi.py”, line 19, in <module>
tmp =
AttributeError: ‘list’ object has no attribute ‘split’
vic57
Lainelir
код в студию вместе с массивом
Lainelir
Выше я уже прикрепил 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>, ..... массив оочень длинный]
FishHook
Lainelir
Я вам еще месяц назад объяснил, как нужно размещать код на форуме
http://python.su/forum/topic/33369/?page=1#post-182524
и вы вроде как даже поняли
http://python.su/forum/topic/33369/?page=1#post-182530
еще раз вы разместите неотформатированный листинг и я начну удалять ваши сообщения
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