複数のワークシートを使用して、Google スプレッドシートから都市名、道路名、およびそれらの間の距離を読み取るアプリケーションを作成したいと考えています。
これまでのところ、次のコードが正しく機能しています。スプレッドシートから読み取り、2 つの都市間の道路名 (Rode 60 など) とそれらの間の距離を知りたいユーザーからの入力も受け取ります。ただし、アプリケーションを実行すると、信じられないほど遅くなります。
サーバー側とユーザー側の問題があると思いますが、大量のドキュメントを読んだ後、非常に混乱しています。たぶん、まったく別のアプローチを検討する必要があります。おそらく、gspread を使用してすべてのスプレッドシートを読み取り、ユーザー側のみで作業する必要があります。ともかく。今は遅いので、後でスプレッドシートに何千もの都市を入れたいと思っています。おそらく、田舎道なのか、高速道路や国道なのかなど、それらに関するデータをさらに追加する予定です。現在のコードで結果が返されます。
私がpython、wxPython、Google API、またはIGraphを使用するのは初めてなので、グラフでこれらのことを行うべきだと提案した場合は、助けてください。今日、私は Python 2.7 用に IGraph もセットアップしました。多分それは私の問題の鍵ですか?少なくとも正しい方法、正しいチュートリアルを教えてください。誰かが私のために汚い仕事をしてくれるとは思っていません。前もって感謝します!!!
import gdata.spreadsheet.service
import gdata.service
import atom.service
import gdata.spreadsheet
import atom
import gspread
import wx
import gdata.docs
import gdata.docs.service
import re
import os
import csv
import math
class laci(wx.Frame):
def __init__(self,parent,id):
wx.Frame.__init__(self,parent,id,'distance calculator',size=(500,500))
panel=wx.Panel(self)
test=wx.TextEntryDialog(None,"Beginning point: ",'Name of beginning point','...')
if test.ShowModal()==wx.ID_OK:
all1=test.GetValue()
test2=wx.TextEntryDialog(None,"Finishing point: ",'Name of finish','...')
if test2.ShowModal()==wx.ID_OK:
all2=test2.GetValue()
c = gspread.Client(auth=('......@gmail.com','.............'))
c.login()
# open spreadsheet
sht=c.open_by_key('.................................')
worksheet = sht.get_worksheet(0)
print worksheet
i = 1
j = 1
What = None
first_col = worksheet.col_values(1)
print first_col
stopper = 0
n = 3
m = 3
while worksheet.cell(i,1).value != None and stopper != 1:
if worksheet.cell(i,1).value == all1:
print all1
stopper = 1
else:
i = i+1
print i
if worksheet.cell(i,1).value == None:
boxy=wx.MessageDialog(None,'Wrong start point. You wanna see correct start points list?','Mistake?',wx.YES_NO)
answer=boxy.ShowModal()
boxy.Destroy
if answer == 5103:
boxl=wx.SingleChoiceDialog(None,'Accepted Starting point names:','In case of mistake',
['City1','City2','City3','City4','City5','City6','City7','City8'])
if boxl.ShowModal()==wx.ID_OK:
all1=boxl.GetStringSelection()
stopper = 0 # figyelj
i = 1
print all1
boxl.Destroy
else:
print 'how unfortunate'
if stopper == 1:
sline = []
while worksheet.cell(i,n).value != None:
line = worksheet.cell(i,n).value
sline.append(line)
n = n + 1
print sline
slinestr = str(sline)
stopper2 = 0
print sline
while worksheet.cell(j,1).value != None and stopper2 != 1:
if worksheet.cell(j,1).value == all2:
print all2
stopper2 = 1
else:
j = j+1
print j
if worksheet.cell(j,1).value == None:
boxz=wx.MessageDialog(None,'Wrong Finish point? Wanna see correct choices?','Mistake?',wx.YES_NO)
answer2=boxz.ShowModal()
boxz.Destroy
if answer2 == 5103:
boxl2=wx.SingleChoiceDialog(None,'Accepted Finishing point names:','In case of mistake',
['City1','City2','City3','City4','City5','City6','City7','City8'])
if boxl2.ShowModal()==wx.ID_OK:
all2=boxl2.GetStringSelection()
print all2
boxl2.Destroy
else:
print 'how unfortunate'
if stopper2 == 1:
sline2 = []
while worksheet.cell(j,m).value != None:
line2 = worksheet.cell(j,m).value
sline2.append(line2)
m = m + 1
print sline2
slinestr2 = str(sline2)
print sline
print sline2
t = list(set(sline) & set(sline2))
print t
t = t[0]
t = str(t)
worksheet2 = sht.worksheet(t)
print worksheet2
print worksheet2.cell(2,2)
i = 2
j = 2
iszam = 1
iszam2 = 1
stopi = 0
stopi2 = 0
km = 0
while worksheet2.cell(i,2).value != None and stopi != 1:
if worksheet2.cell(i,2).value == all1:
iszam = i
print iszam
print worksheet2.cell(i,3)
stopi = 1
i = i + 1
print i
while worksheet2.cell(j,2).value != None and stopi2 != 1:
if worksheet2.cell(j,2).value == all2:
iszam2 = j
print iszam2
print worksheet2.cell(j,3)
stopi2 = 1
j = j + 1
print j
if iszam2 < iszam:
while iszam2 != iszam:
km = km + int(worksheet2.cell(iszam2+1,3).value)
iszam2 = iszam2 + 1
print km
elif iszam2 > iszam:
while iszam != iszam2:
km = km + int(worksheet2.cell(iszam+1,3).value)
iszam = iszam + 1
print km
else:
km = 0
print km
km = str(km)
wx.StaticText(panel, -1, all1, (20,30))
wx.StaticText(panel, -1, slinestr, (80,30))
wx.StaticText(panel, -1, all2, (20,60))
wx.StaticText(panel, -1, slinestr2, (80,60))
wx.StaticText(panel, -1, 'Path =', (20,90))
wx.StaticText(panel, -1, t, (80,90))
wx.StaticText(panel, -1, 'Distance =', (20,120))
wx.StaticText(panel, -1, km, (80,120))
if __name__=='__main__':
app=wx.PySimpleApp() #runs it
frame=laci(parent=None,id=-1) #face of programme
frame.Show()
app.MainLoop()