簡體   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