Найти - Пользователи
Полная версия: Ошибка при создании текстового файла
Начало » Python для новичков » Ошибка при создании текстового файла
1 2
leonid_10
Совершенно случайно наткнулся на непонятную ошибку. При выполнении кода
#!/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()

строк получается на одну больше. И почему-то 17 снизу и 18 абсолютно одинаковые. Если бы в средине текста и не нашёл бы - голова кругом от чисел бы поехала.
Я уже на третьем питоне запускал - то же самое.
В чём дело и как бороться?
Исходный файл прилагаю:
s0rg
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)
leonid_10
s0rg
xml так не парсят:
Почему? А, если не xml? Ошибка всё-равно присутствует. Меня интересует причина ошибки, и она, явно, не в способе достижения цели. Тем более, что я случайно привёл пример с xml, которое меня волнует меньше, ибо xml - это лишь частный случай. Меня интересует общая картина, которая не меняется при любых форматах.
fata1ex
leonid_10
При выполнении кода строк получается на одну больше. И почему-то 17 снизу и 18 абсолютно одинаковые. Если бы в средине текста и не нашёл бы - голова кругом от чисел бы поехала.

Может вы сформулируете нормально проблему?
leonid_10
fata1ex
Может вы сформулируете нормально проблему?

В приложенном исходном файле строк с <note 888. После обработки и записи в файл строк становится 889. При этом производится повторная запись строчки 872. Эта строчка ничем не отличается от других 887 по своей структуре. Возможно, я с числами несколько ошибаюсь, но вопрос теперь сформулирован точно. В 15-20 сточках от низа полученного списка точно находятся две одинаковые строчки, которых в исходном файле нет и быть не может, вообще.
leonid_10
Кстати, я сейчас проверил правильный скрипт от sOrg - та же самая ошибка. За строчкой 872 следует точная её копия, строчка 873
872: 52 10368 12
873: 52 10368 12
fata1ex
Исходный файл:
          <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

Строк в исходном файле 889.
EBFE
>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
52 10368 12

=> test.mpt
945    <note pan="0" key="52" vol="123" pos="10368" len="12"/>
946 <note pan="0" key="52" vol="123" pos="10368" len="12"/>


leonid_10
Чертовщина какая-то. Сейчас ещё раз проверю количество нот. Я весь день сегодня ухайдохал на поиск источника этого дубля. В ЛММС выбрасывал и по одной вставлял эти последние 20 нот.
Блин! Игры разума!

Всё, разобрался! По запарке удалил дубль в переименованном файле. Дописал несколько строчек, чтоб все дубли ликвидировать. Нот осталось 867, ура.
Приношу извинения за беспокойство!
odnochlen
leonid_10
Я весь день сегодня ухайдохал на поиск источника этого дубля.
Хорошая причина изучить готовые модули.
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