[英]Having problems creating kmls with python
我正在使用 python 和 simplekml creator 创建 kml 文件。 出于某种原因,它会创建两个 kml 文件,而不会创建第三个。 数据对我来说似乎很好。 这是代码:
times=open("E:\\Python\Copyofresttable.csv","r")
import time
import csv
import simplekml
from time import strftime, localtime
dayoftheweekvariable = strftime("%A", localtime())
print dayoftheweekvariable
kml = simplekml.Kml()
if dayoftheweekvariable == "Monday":
for line in times:
a = line.split(',')
if a[2] == "Monday":
print a[5]
if dayoftheweekvariable == "Tuesday":
for line in times:
a = line.split(',')
if a[2] == "Tuesday":
print a[5]
if dayoftheweekvariable == "Wednesday":
for line in times:
a = line.split(',')
if a[1]== "Iron Hill" and a[2] =="Wednesday":
kml.newpoint(name="Iron Hill", coords=[(-75.605507,39.960504)], description=a[5])
kml.save("pythonmap.kml")
print "Creating KML"
if a[1]== "Side Bar and Resturant" and a[2] =="Wednesday":
kml.newpoint(name="Side Bar and Resturant", coords=[(-75.604805,39.960591)], description=a[5])
kml.save("pythonmap.kml")
print "Creating KML"
if a[1]== "Barnaby's" and a[2] =="Wednesday":
kml.newpoint(name="Barnaby's", coords=[(-75.604049,39.959488)], description=a[5])
kml.save("pythonmap.kml")
print "Creating KML"
显然在周三晚上对此进行了测试......至于最后三个 if 语句,无论我把它们放在什么位置,它都会为 Iron Hill 和 Barnaby's 而不是侧边栏创建一个 kml。 这是它返回的结果:
Wednesday
Creating KML
Creating KML
Traceback (most recent call last):
File "C:/Users/75IV740906/Desktop/py117", line 26, in <module>
if a[1]== "Iron Hill" and a[2] =="Wednesday":
IndexError: list index out of range
错误消息指出 if 语句位于顶部。 我难住了。 希望我的问题是有道理的(为什么它给我这个错误信息并且只创建两个 kmls,无论 if 语句的顺序如何)
改变
times=open("E:\\Python\Copyofresttable.csv","r")
到:
times=open("E:\\Python\Copyofresttable.csv","r").read()
在你的第一行并添加一个
print('#Times: {0}'.format(len(times.split())))
以确保您有足够的线路...
更新:
您回溯(在评论中)显示您的(第一个?!) dayoftheweek
似乎是星期三,这就是为什么您的第一个两个 if 被忽略的原因。 那么看起来您的列表a
没有足够的条目。
您可以使用print("# a: {0}".format(len(a)))
检查该假设
因此,如果您的条目少于 3 个,则a[2]==
必须失败,因为list index out of range
;-)
啊,我一开始没有正确阅读你的问题。 这样更有意义,如果每个第一个 if 语句都抛出异常....
更新 2:顺便说一句:您应该及时重新for line in times:
您的for line in times:
循环到不太冗余的方式,例如:
lines=open("E:\\Python\Copyofresttable.csv","r").readlines()
...
for line in lines:
a = line.split(',')
if a[2] == "Monday" == dayoftheweek:
...
elif a[2] == "Tuesday" == dayoftheweek:
...
elif a[1]== "Iron Hill" and a[2] =="Wednesday" == dayoftheweek:
...
更新 3:
如果省略某些行,您可以通过执行以下操作来“欺骗”一点:
a = line.split(',')
if len(a) < 6:
continue # ignores the rest of the loop and jumps stright to the next iteration
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.