Вывод цикла if в разных шаблонах python

Мой проект посвящен обнаружению формы, мне нужно обнаружить другой прямоугольник в данном изображении, а затем импортировать эти данные в файл .qml, я смог это сделать, но проблема в том, что вывод в консоли (я Я использую Spyder) - это n шаблонов (.qml), где n - количество прямоугольников на изображении, а в моей папке есть только один файл .qml (последний в консоли)

Я не знаю, в чем моя ошибка. Ниже вы найдете отрывок из моего кода:

    if shape == "rectangle":
        x,y,w,h = cv2.boundingRect(c)
        cv2.rectangle(image,(x,y),(x+w,y+h),(0,255,0),0)
        myfile.write('The cordinations of the rectangle are :\n')
        myfile.write('x : '+str(x)+'\n')
        myfile.write('y : '+str(y)+'\n')
        myfile.write('width : '+str(w)+'\n')
        myfile.write('height : '+str(h)+'\n')
        # Open template file and pass string to 'data'.
        # Will be in QML syntax except with the string.Template replace tags
        # with the format of '$var'. The 'var' MUST correspond to the items
        # that will be calculated (i.e. coordinates, sizes, ids, etc.)
        with open('cordinations.txt', 'r') as my_template:
            data = my_template.read()
            # Print template for visual cue.
            print('Template loaded:')
            print(data)
            # Pass 'data' to string.Template object data_template.
            data_template = string.Template(data)             

            cordinates=[]
            cordinates.append(dict(abscisse=x,ordonee=y,width=w,height=h))
            t=Template("""
        x: $abscisse
        y: $ordonee
        w: $width
        h: $height
        """)
            print "    Rectangle:"
            print("      {")
            for data in cordinates:
                print (t.substitute(data))
                print("      }")

                # Open QML output file and fill its contents by string substitution
            with open("main.qml", 'w') as output_file:
                # Run string.Template substitution on data_template
                # using data from 'values' as source and write to 'output_file'.
                output_file.write('import QtQuick 2.2')
                output_file.write('\nItem')
                output_file.write("  \n{")
                output_file.write("   id:\n")
                output_file.write('   height: '+str(height)+'\n')
                output_file.write('   width: '+str(width)+'\n')
                if shape == 'rectangle':
                    output_file.write('  \n\n  Rectangle')
                    output_file.write("   \n   {")
                    output_file.write('    \n            id:')
                    output_file.write(t.substitute(data))
                    output_file.write("}")
                    output_file.write("\n}")
                output_file.close()
            #    Print QML generated code for visual cue.
            with open('main.qml', 'r') as my_qml:
                qml_code = my_qml.read()
                print('QML code generated:')
                print(qml_code)

    # show the output image
    cv2.imshow("Shapes", image)
    cv2.waitKey(0)

Спасибо за время и помощь

Первый if - это не петля, это условие

Venkata S S K M Chaitanya 02.05.2018 16:56

Небольшое примечание: вам не нужно закрывать дескриптор файла вручную (output_file.close()) в with-области. Это будет сделано автоматически, когда вы покинете прицел.

nutic 02.05.2018 16:59

Спасибо за разъяснения, я попробовал решение ur, но получил эту ошибку: `with shape == 'rectangle':` AttributeError: __exit__

newbie 02.05.2018 17:11
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
44
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно использовать 'a' (добавление) вместо 'w' (запись) в вашем

with open("main.qml", 'w') as output_file:

Другие вопросы по теме