2014-09-02 5 views
0

Я извлекаю все координаты из файла kml. Это работает, но моя проблема в том, что в конце моего файла я заканчиваю «},}« вместо «}}». Я понимаю, что могу просто вручную отредактировать конец файла после его создания, но я бы предпочел, чтобы это было сделано автоматически в коде. Заключенный раздел содержит код, который я нашел в другом ответе, но он ничего не делает для меня.Как удалить последние два символа из моего файла?

import re 
import os 

KML = open('NYC_Tri-State_Area.kml','r') 

NYC_Coords = open('NYC_Coords.txt', 'w') 

coords = re.findall(r'((?<=<coordinates>).*(?=<\/coordinates>))', KML.read()) 

NYC_Coords.write("{") 

for coord in coords: 
    NYC_Coords.write("{" + str(coord) + "}, ") 
... 
with open('NYC_Coords.txt', 'rb+') as filehandle: 
    filehandle.seek(-2, os.SEEK_END) 
    filehandle.truncate() 
... 

NYC_Coords.write("}") 

KML.close() 
NYC_Coords.close() 
+0

Doon't вы хотите что-то вроде «,». Join (str (координировать) для координации в координатах)? – Squidly

+0

Ick. Используйте парсер kml, чтобы разобрать его/записать. Или даже просто 'json', как только вы проанализировали его в структуре данных python. – roippi

ответ

1

Существует ряд предложений по устранению проблемы. Во-первых, вероятно, плохая идея использовать регулярное выражение для анализа XML-документов. Существует множество выделенных модулей для разбора KML, например pyKML

Во-вторых, вы можете исключить необходимость усечения полностью путем правильной генерации строки. В этом случае при замене:

for coord in coords: 
    NYC_Coords.write("{" + str(coord) + "}, ") 

с очень простым однострочником:

NYC_Coords.write(', '.join('{{{}}}'.format(coord) for coord in coords)) 

Вы теперь больше не имеете дополнительный задний ', ' в конце документа.

0
for coord in coords: 
    NYC_Coords.write("{" + str(coord) + "}, ") 

Здесь вы пишете "" в конце каждого коорд. Но то, что вы действительно хотите сделать, это написать «,» между каждой координатой. join может использоваться для чередования строк таким образом.

NYC_Coords.write(", ".join("{" + str(coord) + "}" for coord in coords)) 

Теперь у вас не будет конечной запятой в конце вашей окончательной координации.

0

Как coords список строк, вы можете сделать:

NYC_Coords.write("{{{{{0}}}}}".format("}, {".join(coords))) 

К сожалению, ваш выход использует тот же синтаксис, как str.format, так что вам нужно, чтобы избежать много фигурных скобок в шаблоне ... Демонстрация:

>>> coords = ["foo", "bar", "baz"] 
>>> "{{{{{0}}}}}".format("}, {".join(coords)) 
'{{foo}, {bar}, {baz}}' 

Вы могли бы избежать побегов с струнной C-стиль форматирования:

>>> "{{%s}}" % "}, {".join(coords) 
'{{foo}, {bar}, {baz}}' 
Смежные вопросы