Python: вставлять изображения в кмз

У меня есть серия файлов kmz (1000+) в одной папке, которую я сгенерировал для каждого многоугольника класса пространственных объектов и соответствующего изображения (все изображения находятся в отдельной папке). Эти кмз автоматически генерируются из таблиц атрибутов моих шейп-файлов из arcGIS. В каждом файле kmz у меня есть ссылка на изображение, которое соответствует этой функции как таковой:

<tr> 
<td>Preview</td>    
<td>G:\Temp\Figures\Ovr0.png</td>    
</tr>

На данный момент каждое изображение представляет собой только табличный текст, ссылающийся на изображение в каталоге /Temp/Figures. То, что нравится, это конвертировать все эти тексты в ссылки, что-то вроде

 <img src="file:///G:/Temp/Figures/Ovr0.png" width = 750 height=500/>

Учитывая большой объем файлов, было бы идеально, если бы это можно было сделать в python, simplekml? Еще одно замечание - на каком-то этапе я хотел бы поделиться несколькими из этих файлов kmz, и поэтому мне было интересно, если лучшим решением было бы разделить каждую пару kmz и изображения на их собственные соответствующие каталоги и каким-то образом разархивировать файл kmz?

1 ответ

Решение

Мне удалось решить мою проблему путем итерации каждого кмз и изображения и использования модуля zipfile для чтения содержимого, переписать файл doc.kml и переархивировать файлы в кмз. В данный момент изображения располагаются после в kmz, но более сложный аргумент может быть записан с помощью re я предполагаю.

Если есть более эффективный метод, пожалуйста, дайте мне знать...

   def edit_kmz(kmz,output,image):

        ##Read the doc.kml file in the kmz and rewrite the doc.kml file

        zf = zipfile.ZipFile(kmz)
        temp = r'tempfolder\doc.kml'
        for line in zf.read("doc.kml").split("\n"):
            with open(temp,'a') as wf: #Create the doc.kml
                if "</body>" in line:
                    wf.write("</body>\n<img src='files/Ovr0.png' width = 750 height=500</img>\n") 
                else:
                    wf.write('%s\n'%(line))
        zf.close()

        ##Rezip the file

        zf = zipfile.ZipFile(output,'a')
        zf.write(image,arcname='files/Ovr0.png') ##Relative Path to the Image
        zf.write(temp,arcname='doc.kml') ##Add revised doc.kml file
        zf.close()
Другие вопросы по тегам