我从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 :(得分:1)
有许多建议可以解决您的问题。首先,使用正则表达式解析XML派生文档可能是个坏主意。有许多用于解析KML的专用模块,如pyKML
其次,您可以通过正确生成字符串来消除完全截断的需要。在这种情况下,通过替换:
for coord in coords:
NYC_Coords.write("{" + str(coord) + "}, ")
非常简单的单行:
NYC_Coords.write(', '.join('{{{}}}'.format(coord) for coord in coords))
现在,您的文档末尾不再有额外的结尾', '
。
答案 1 :(得分:0)
for coord in coords:
NYC_Coords.write("{" + str(coord) + "}, ")
在这里,你在每个坐标的末尾写下“,”。但你真正想做的是在每个coord之间写“,”。 join
可用于以这种方式交换字符串。
NYC_Coords.write(", ".join("{" + str(coord) + "}" for coord in coords))
现在,在最后的coord结束时,你将没有逗号。
答案 2 :(得分: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}}'