2

Python と simplekml クリエーターを使用して kml ファイルを作成しています。何らかの理由で 2 つの kml ファイルが作成され、3 つ目は作成されません。データは私には問題ないようです。コードは次のとおりです。

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"

明らかに水曜日の夜にこれをテストしています...最後の3つのifステートメントに関しては、それらをどの順序で配置しても、Iron HillとBarnabyの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ステートメントが一番上にあるものを呼び出します。私は困惑しています。私の質問が理にかなっていることを願っています(なぜこのエラーメッセージが表示され、ifステートメントの順序に関係なく2つのkmlしか作成されないのですか)

4

1 に答える 1

0

変化する

times=open("E:\\Python\Copyofresttable.csv","r")

に:

times=open("E:\\Python\Copyofresttable.csv","r").read()

最初の行に追加します

print('#Times: {0}'.format(len(times.split())))

十分な行があることを確認するには...

更新

トレースバック (コメント内) は、(1st?!)dayoftheweekが水曜日のように見えることを示しています。そのため、最初の 2 つの if は無視されます。次に、リストaに十分なエントリがないようです。

その仮定をprint("# a: {0}".format(len(a)))

したがって、エントリが 3 つ未満の場合a[2]==は失敗する必要があります。 list index out of range;-)

ああ、最初はあなたの質問をきちんと読んでいませんでした。そして、最初のifステートメントごとに例外がスローされている場合、その方が理にかなっています....

更新 2: ところで: 次のように、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
于 2012-11-08T01:10:42.107 に答える