繁体   English   中英

如何从文件中删除最后两个字符?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM