[英]How can I remove the last two characters from my file?
我要从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()
有许多解决问题的建议。 首先,使用正则表达式解析XML派生的文档可能是个坏主意。 有许多用于解析KML的专用模块,例如pyKML
其次,可以通过正确生成字符串来消除完全截断的需要。 在这种情况下,通过替换:
for coord in coords:
NYC_Coords.write("{" + str(coord) + "}, ")
非常简单的单线:
NYC_Coords.write(', '.join('{{{}}}'.format(coord) for coord in coords))
现在', '
文档末尾将不再有多余的尾部', '
。
for coord in coords:
NYC_Coords.write("{" + str(coord) + "}, ")
在这里,您在每个坐标的末尾都输入“,”。 但是您真正想做的是在每个坐标之间写“,”。 join
可以这种方式用于插入字符串。
NYC_Coords.write(", ".join("{" + str(coord) + "}" for coord in coords))
现在,在最后一个协调符的结尾,您将没有逗号结尾。
由于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}}'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.