2017-03-16 52 views
-2

我還是很新的python,我試圖將列表(List2)上的位置導出到一個kml文件,然後將在谷歌地圖上顯示結果。我不知道真正的我在做什麼和ATM所有我得到是一個語法錯誤周圍的每一個,「符號。有人可以幫我這吧。試圖在Python中創建一個KML文件

KMLFile = open("KML.txt", "w") 
f.write("<KML_File>\n") 
f.write("<Document>\n") 
for line in List2: 
    f.write(" <Placemark>") 
    f.write("  <decription>" + str(row[0]) + "</description>") 
    f.write("  <Point>") 
    f.write("   <coordinates>" + str(row[2]) + str(row[1])"</coordinates>") 
    f.write("  </Point>") 
    f.write(" </Placemark>") 
f.write("</Document>\n") 
f.write("</kml>\n") 
KMLFile = close() 

回答

0

簡單:

  • 你應該改變KMLFilef,反之亦然。
  • 你應該打電話close()這樣的方法:f.close()

你糾正代碼:

f = open("KML.txt", "w") 
f.write("<KML_File>\n") 
f.write("<Document>\n") 
for line in List2: 
    f.write("\t<Placemark>") 
    f.write("\t\t<decription>" + str(row[0]) + "</description>") 
    f.write("\t\t<Point>") 
    f.write("\t\t\t<coordinates>" + str(row[2]) + str(row[1]) + "</coordinates>") 
    f.write("\t\t</Point>") 
    f.write("\t</Placemark>") 
f.write("</Document>\n") 
f.write("</kml>\n") 
f.close() 

另外,如果你不想寫f.close()線,讓蟒蛇管理文件關閉:

with open("KML.txt", "w") as f: 
    f.write("<KML_File>\n") 
    f.write("<Document>\n") 
    for line in List2: 
     f.write("\t<Placemark>") 
     f.write("\t\t<decription>" + str(row[0]) + "</description>") 
     f.write("\t\t<Point>") 
     f.write("\t\t\t<coordinates>" + str(row[2]) + str(row[1]) + "</coordinates>") 
     f.write("\t\t</Point>") 
     f.write("\t</Placemark>") 
    f.write("</Document>\n") 
    f.write("</kml>\n") 

最後,如果你這樣做不想有很多+進入你的f.write()行,你也可以選擇format()方法:

f.write("\t\t\t<coordinates>{}{}/coordinates>".format(row[2], row[1])) 
+0

我是一個完整的derp omg,好吧,我已經改變了,但我仍然不斷收到這部分代碼的語法錯誤: f.write(「\ t \ t \ t 「+ str(row [2])+ str(row [1])」「) 在最後,」,由於某種原因,符號 –

+0

我編輯了代碼, +' – PurpleJo

1

在你的代碼還沒有定義。可變f應該引用您要寫入文件的對象時,既可以做

f = open("KML.txt", "w") 
f.write("<KML_File>\n") 
... 
f.close() 

或更好:

with open("KML.txt", "w") as f: 
    f.write("<KML_File>\n") 
    ... 

這使得一定要始終關閉該文件,即使如此我在兩者之間的代碼失敗。

要編寫XML文件,您可能需要查看Python xml-package

+0

我是一個完整DERP OMG,確定我已經改變了,但我仍然在這部分代碼中出現語法錯誤:f.write(「\ t \ t \ t 」+ str(row [2])+ str(row [1])「」)在最後,「,由於某種原因的標誌 –

+0

你忘記了船尾的」+「號er'str(row [1])' –

0

而不是在print語句中對XML輸出進行硬編碼,您應該使用simplekml包。 simplekml API不僅可以簡化KML的編寫,而且可以生成有效的KML,其代碼更清晰,更易於理解。

import simplekml 

kml = simplekml.Kml() 
for row in List2: 
    kml.newpoint(description=row[0], 
     coords=[(row[2], row[1])]) # lon, lat, optional height 
kml.save("test.kml") 

使用這種測試輸入爲單點:

List2 = [ [ 'description', 51.500152, -0.126236 ] ] # description, lat, lon 

的KML輸出會是這樣:

<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2"> 
    <Document id="feat_1"> 
     <Placemark id="feat_2"> 
      <description>description</description> 
      <Point id="geom_0"> 
       <coordinates>-0.126236,51.500152,0.0</coordinates> 
      </Point> 
     </Placemark> 
    </Document> 
</kml>