Форум сайта python.su
Совершенно случайно наткнулся на непонятную ошибку. При выполнении кода
#!/usr/bin/python # coding:utf-8 file = open("shmel.txt", "w") for line in open("test.mpt"): s = line.split() if s[0]=="<note": k=s[2][5:] k=k[:(len(k)-1)] k=int(k) p=s[4][5:] p=p[:(len(p)-1)] p=int(p) l=s[5][5:] l=l[:(len(l)-3)] l=int(l) file.write("%s %s %s\n"%(k,p,l)) print (k,p,l) file.close()
Офлайн
xml так не парсят:
#!/usr/bin/env python
#-*- coding: utf8 -*-
from lxml import etree
def parse_mpt(name):
root = etree.parse(name)
notes = root.xpath('//pattern/note')
return [(n.get('key'), n.get('pos'), n.get('len')) for n in notes]
parsed = parse_mpt('test.mpt')
buf = '\n'.join([' '.join(e) for e in parsed])
with open('shmel.txt', 'w') as fd:
fd.write(buf)
Офлайн
s0rgПочему? А, если не xml? Ошибка всё-равно присутствует. Меня интересует причина ошибки, и она, явно, не в способе достижения цели. Тем более, что я случайно привёл пример с xml, которое меня волнует меньше, ибо xml - это лишь частный случай. Меня интересует общая картина, которая не меняется при любых форматах.
xml так не парсят:
Отредактировано leonid_10 (Июль 7, 2012 15:22:07)
Офлайн
leonid_10
При выполнении кода строк получается на одну больше. И почему-то 17 снизу и 18 абсолютно одинаковые. Если бы в средине текста и не нашёл бы - голова кругом от чисел бы поехала.
Офлайн
fata1ex
Может вы сформулируете нормально проблему?
Офлайн
Кстати, я сейчас проверил правильный скрипт от sOrg - та же самая ошибка. За строчкой 872 следует точная её копия, строчка 873
872: 52 10368 12
873: 52 10368 12
Офлайн
Исходный файл:
<note pan="0" key="52" vol="123" pos="10368" len="12"/>
<note pan="0" key="52" vol="123" pos="10368" len="12"/>
52 10368 12
52 10368 12
Отредактировано fata1ex (Июль 7, 2012 16:48:19)
Офлайн
>grep "<note" test.mpt | wc -l
889
>python inp.py test.mpt | wc -l
889
#!/usr/bin/python # coding:utf-8 c = 0 for line in open("test.mpt"): s = line.split() if s[0]=="<note": c += 1 print c >python inp.py 889
За строчкой 872 следует точная её копия, строчка52 10368 12
945 <note pan="0" key="52" vol="123" pos="10368" len="12"/>
946 <note pan="0" key="52" vol="123" pos="10368" len="12"/>
Отредактировано EBFE (Июль 7, 2012 16:49:06)
Офлайн
Чертовщина какая-то. Сейчас ещё раз проверю количество нот. Я весь день сегодня ухайдохал на поиск источника этого дубля. В ЛММС выбрасывал и по одной вставлял эти последние 20 нот.
Блин! Игры разума!
Всё, разобрался! По запарке удалил дубль в переименованном файле. Дописал несколько строчек, чтоб все дубли ликвидировать. Нот осталось 867, ура.
Приношу извинения за беспокойство!
Отредактировано leonid_10 (Июль 7, 2012 21:05:32)
Офлайн
leonid_10Хорошая причина изучить готовые модули.
Я весь день сегодня ухайдохал на поиск источника этого дубля.
Офлайн