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