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

时间:2014-09-02 14:04:15

标签: python file python-3.x file-io

我从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()

3 个答案:

答案 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}}'