2016-11-17 2 views
-1

Я не уверен, вероятно, ответ здесь где-то здесь уже, но из-за моего «noob-status» мне очень сложно понять, действительно ли у заданных вопросов есть что-то делать с моей проблемой и поверьте мне, я попытался найти решение со вчерашнего утра, и мне нужно сделать завтра, так что вот я иду:Правильно форматирование списка с помощью python

Мне нужно написать скрипт с Python27, который автоматически преобразует данный CSV- файл с координатами в KML-файл, который можно использовать для google earth.

Это то, что я до сих пор:

# imports the module urllib2 to open URLs 
import urllib2 
# ask for URL and load it 
# Bsp.: http://koenigstuhl.geog.uni-heidelberg.de/~bhoefle/geoscripting/GPS_track_HD_Bodensee.csv 
URL = raw_input("Enter the URL to your CSV-file: ") 
response = urllib2.urlopen(URL) 
html = response.read() 
#print html 

Zielverzeichnis = raw_input("Enter the path where you would like to store the file:") 
Dateiname = "/" + raw_input("Name your file:") + ".kml" 
#print Dateiname 
#print Zielverzeichnis 
#print Zielverzeichnis + Dateiname 
Tabelle = Zielverzeichnis + Dateiname 
fileobj = file(Tabelle, "w") 
with open(Tabelle, "w") as writefile: 
    writefile.write(html) 


#import csv 
#data = csv.reader(open(Tabelle), delimiter = ',') 
f = open(Tabelle, 'w') 
f.write("<?xml version='1.0' encoding='UTF-8'?>\n") 
f.write("<kml xmlns='http://www.opengis.net/kml/2.2'>\n") 
f.write("<Placemark>\n") 
f.write("<name>" + Dateiname +"</name>\n") 
f.write("<MultiGeometry>\n") 
f.write("<LineString>\n") 
f.write("<coordinates>\n") 

html2 = html.split() 
Koordinaten = html2[3:1003] 


#Koordinaten.insert([n*30], ]]) 
f.writelines(Koordinaten) 

f.close() 
#with open(Tabelle) as rfile: 
# lines = rfile.readlines()[1:1001] 
# print lines 
# linevalues = lines.split(",") 
# firstval = float(linevalues[0]) 
# secondval = float(linevalues[1]) 
# print firstval, secondval 

материал в конце есть/были только идеи о том, как ее решить. Если вы выполните скрипт, вы увидите, что в файл вставляются первые координаты 1000, но как я разделяю три значения для lat/long/elevation и помещаю их в порядок, необходимый для google earth (long/lat/elevation) ? Я был бы очень рад услышать от вас скоро! Благодаря

EDIT: Прямо сейчас это выглядит так:

<?xml version='1.0' encoding='UTF-8'?> 
 
<kml xmlns='http://www.opengis.net/kml/2.2'> 
 
<Placemark> 
 
<name>/Testfile.xml</name> 
 
<MultiGeometry> 
 
<LineString> 
 
<coordinates> 
 
49.40336870,8.681468410,117.049.40212450,8.680264000,118.049.40083450,8.678729290,112.049.39974100,8.676724960,115.049.39909890,8.675406580,113.049.39823150,8.673896850,111.049.39741020,8.672800160,111.049.39693920,8.671590970,111.049.39594540,8.669930680,110.049.39212020,8.665451860,111.049.38969310,8.662548160,110.049.38685910,8.658890010,109.049.38423320,8.655726650,110.049.37958570,8.650085210,110.049.37725820,8.647567880,108.049.37616580,8.646088460,110.049.37584310,8.646435030,109.049.37551880,8.646217030,110.049.37448140,8.645122860,107.0

И мне нужно, чтобы она выглядела так:

<?xml version='1.0' encoding='UTF-8'?> 
 
<kml xmlns='http://www.opengis.net/kml/2.2'> 
 
<Placemark> 
 
<name>/Testfile.xml</name> 
 
<MultiGeometry> 
 
<LineString> 
 
<coordinates> 
 
    49.40336870,8.681468410,117.0 
 
    49.40212450,8.680264000,118.0 
 
    49.40083450,8.678729290,112.0 
 
    49.39974100,8.676724960,115.0 
 
    49.39909890,8.675406580,113.0 
 
    49.39823150,8.673896850,111.0 
 
    49.39741020,8.672800160,111.0 
 
    49.39693920,8.671590970,111.0 
 
    49.39594540,8.669930680,110.0 
 
    49.39212020,8.665451860,111.0 
 
    49.38969310,8.662548160,110.0 
 
    49.38685910,8.658890010,109.0 
 
    49.38423320,8.655726650,110.0 
 
    49.37958570,8.650085210,110.0 
 
    49.37725820,8.647567880,108.0 
 
    49.37616580,8.646088460,110.0 
 
    49.37584310,8.646435030,109.0 
 
    49.37551880,8.646217030,110.0 
 
    49.37448140,8.645122860,107.0

С одной разницей: значения 49.xy (широта) и 8.xy (долгота) также должны быть изменены.

+0

Ваш закомментирована код почти нет. 'lines' - это список, поэтому вы не сможете выполнить' linevalues ​​= lines.split (",") '. Вам нужно будет использовать цикл 'for' для итерации по каждому элементу в' lines', а затем разделить на ',', а затем записать вывод этого 'split' в любом порядке, в котором вы нуждаетесь. –

+0

Спасибо за ваш быстрый повтор, но я просто не понимаю его сейчас, пробовал его с полчаса снова, и это то, что я получил до сих пор, хотя я уверен, что это бесполезно: 'для линий в Koordinaten: f.write («% s»% строк) lines.split (,) ' очевидно, что это неправильно. – ottittii

+0

Можете ли вы привести пример нескольких строк из «Tabelle» и ваших ожидаемых строк в ваш новый файл в вашем вопросе. –

ответ

0

Я бы рекомендовал открыть файл только один раз и написать все, а не открывать и закрывать несколько раз.

Проблема эта линия: f.writelines(Koordinaten)

Вместо этого используйте:

f.write('\n'.join(Koordinaten)) 
+0

, когда я использую это, просто говорит «нет». Мое решение было бы таким, как 'Koordinaten.insert (1," \ n ") Koordinaten.insert (3," \ n ") Koordinaten.insert (5," \ n ") Koordinaten.insert (7, "\ n") Koordinaten.insert (9, "\ n") Koordinaten.insert (11, "\ n") ' Могу ли я использовать функцию цикла так, чтобы она просто повторялась до 999? Таким образом, формат был бы уже подходящим, и мне просто нужно было изменить строку 1 и вторую строку 'Koordinaten' как-то – ottittii

+0

Что вы подразумеваете под словами« none »? Где он не говорит? –

Смежные вопросы