CPU: Intel core i5 3450 | GPU: Asus Radeon HD 7870 | PSU: Corsair GS 600W | Moderkort: MSI b75a-g43 | HDD WD blue 500 GB | RAM: Crucial ballistiX 2x4gb DDR3 1600MHz | Ljudkort: Asus Xonar DG |
python html parser
Visa signatur
Så som din indentering är för tillfället så försöker du till klassen MyHTMLParser
skapa ett klassattribut h
, som i sig ska peka på en instans av samma klass. Det är högst troligen inte vad du vill, och problemet är explicit att klassen MyHTMLParser
inte definierats klart när du försöker binda detta attribut till en ny instans av densamma, vilket är varför Python klagar på att klassen inte är definierad (varje "top level"-rad i en klassdefinition exekverar redan vid kompileringssteget).
Du kan börja med att ta bort indenteringen för dina sista två rader och lägga dessa utanför klassdefinitionen för att bli av med kompileringsfelet. Det kommer säkert ge fler felmeddelanden (exempelvis ser variabeln my_directions
typiskt odefinierad ut) och kanske fortfarande inte göra vad du vill, men det är inte lätt att veta vad du vill utifrån vad som visats här .
Visa signatur
Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.
Citera flera
Citera
(2)
Skrivet av phz:
Så som din indentering är för tillfället så försöker du till klassen MyHTMLParser
skapa ett klassattribut h
, som i sig ska peka på en instans av samma klass. Det är högst troligen inte vad du vill, och problemet är explicit att klassen MyHTMLParser
inte definierats klart när du försöker binda detta attribut till en ny instans av densamma, vilket är varför Python klagar på att klassen inte är definierad (varje "top level"-rad i en klassdefinition exekverar redan vid kompileringssteget).
Du kan börja med att ta bort indenteringen för dina sista två rader och lägga dessa utanför klassdefinitionen för att bli av med kompileringsfelet. Det kommer säkert ge fler felmeddelanden (exempelvis ser variabeln my_directions
typiskt odefinierad ut) och kanske fortfarande inte göra vad du vill, men det är inte lätt att veta vad du vill utifrån vad som visats här .
Okej är ny med python och försöker fixa ihop något med google maps api till python. Har fixat de du sa men får nu ett nytt felmedelande.
import googlemaps
from html import parser
class MyHTMLParser(parser):
container = ""
def handle_data(self, data):
self.container += data
return self.container
h = MyHTMLParser()
h.feed(my_directions)
gmaps = googlemaps.Client(key='AIzaSyCWc412ea7lCr1A96bUnKbcIsEEh6FOz-g')
my_distance = gmaps.distance_matrix('Chicago', 'New York City')
my_directions = gmaps.directions('Karlskrona', 'Halmstad')
print (h.container)
print(my_distance)
Traceback (most recent call last):
File "C:/Python34/parser.py", line 5, in <module>
class MyHTMLParser(parser):
TypeError: module.__init__() takes at most 2 arguments (3 given)
Jag vet inte riktigt hur vad som menas med att jag ger den 3 argument, när jag bara skrivit med parser. Oerhört tacksam för hjälpen
Visa signatur
CPU: Intel core i5 3450 | GPU: Asus Radeon HD 7870 | PSU: Corsair GS 600W | Moderkort: MSI b75a-g43 | HDD WD blue 500 GB | RAM: Crucial ballistiX 2x4gb DDR3 1600MHz | Ljudkort: Asus Xonar DG |
Citera flera
Citera
@turbogeten
parser är en modul, inte en klass.
Så just nu försöker din klass MyHTMLParser ärva från hela modulen parser, det du nog egenteligen vill göra är dock att ärva från klassen html.parser.HTMLParser.
Så ändra till:
...
from html.parser import HTMLParser
class MyHTMLParser(HTMLParser):
...
Visa signatur
The difference between stupidity and genius - the latter has limits
Citera flera
Citera
(2)
Skrivet av Zevon:
@turbogeten
parser är en modul, inte en klass.
Så just nu försöker din klass MyHTMLParser ärva från hela modulen parser, det du nog egenteligen vill göra är dock att ärva från klassen html.parser.HTMLParser.
Så ändra till:
...
from html.parser import HTMLParser
class MyHTMLParser(HTMLParser):
...
Okej tack, får nu:
Traceback (most recent call last):
File "C:\Python34\parser.py", line 23, in <module>
h.feed(my_directions)
File "C:\Python34\lib\html\parser.py", line 164, in feed
self.rawdata = self.rawdata + data
TypeError: Can't convert 'list' object to str implicitly
Antar de är begränsing mellan google maps api o parsern. Och att de inte går att lösa på detta sätt. Skickar med kod ifall det finns något som ser tokigt ut. Om ni vet något annat sätt att få ut snygg text ifrån google maps api:ns directions får ni gärna dela med er av det med.
import googlemaps
from html.parser import HTMLParser
gmaps = googlemaps.Client(key='AIzaSyCWc412ea7lCr1A96bUnKbcIsEEh6FOz-g')
my_distance = gmaps.distance_matrix('Chicago', 'New York City')
my_directions = gmaps.directions('Karlskrona', 'Halmstad')
class MyHTMLParser(HTMLParser):
container = ""
def handle_data(self, data):
self.container += data
return self.container
h = MyHTMLParser()
h.feed(my_directions)
print (h.container)
print(my_distance)
Visa signatur
CPU: Intel core i5 3450 | GPU: Asus Radeon HD 7870 | PSU: Corsair GS 600W | Moderkort: MSI b75a-g43 | HDD WD blue 500 GB | RAM: Crucial ballistiX 2x4gb DDR3 1600MHz | Ljudkort: Asus Xonar DG |
Citera flera
Citera
Skrivet av turbogeten:
Okej tack, får nu:
Traceback (most recent call last):
File "C:\Python34\parser.py", line 23, in <module>
h.feed(my_directions)
File "C:\Python34\lib\html\parser.py", line 164, in feed
self.rawdata = self.rawdata + data
TypeError: Can't convert 'list' object to str implicitly
Antar de är begränsing mellan google maps api o parsern.
Om du läser i dokumentationen för html.parser.HTMLParser
så ser du dels ett exempel på hur klassen används, och dels att dess feed
-metod tar en sträng som input. Du försöker skicka in my_directions
, som är en lista (det kan vi antingen kontrollera själva, eller läsa dokumentationen för modulen), och det går inte för sig, precis som Python säger:
TypeError: Can't convert 'list' object to str implicitly
Det går inte att blint tolka en lista som en sträng.
För att få en bild av hur dataformatet du hämtar ser ut så kan vi skriva ut det:
>>> import googlemaps
>>> gmaps = googlemaps.Client(key='AIzaSyCWc412ea7lCr1A96bUnKbcIsEEh6FOz-g')
>>> my_directions = gmaps.directions('Karlskrona', 'Halmstad')
>>> from pprint import pprint
>>> pprint(my_directions)
[{'bounds': {'northeast': {'lat': 56.67478910000001, 'lng': 15.6156104},
'southwest': {'lat': 56.1607924, 'lng': 12.8582172}},
'copyrights': 'Map data ©2015 Google',
'legs': [{'distance': {'text': '212 km', 'value': 212390},
'duration': {'text': '2 hours 47 mins', 'value': 10017},
'end_address': 'Halmstad, Sweden',
'end_location': {'lat': 56.6743775, 'lng': 12.8582172},
'start_address': 'Karlskrona, Sweden',
'start_location': {'lat': 56.1612464, 'lng': 15.5862243},
'steps': [{'distance': {'text': '46 m', 'value': 46},
'duration': {'text': '1 min', 'value': 12},
'end_location': {'lat': 56.16083,
'lng': 15.5861798},
'html_instructions': 'Head <b>south</b> toward '
'<b>Stortorget</b>',
'polyline': {'points': 'y~wuI{dc~ArAF'},
'start_location': {'lat': 56.1612464,
'lng': 15.5862243},
'travel_mode': 'DRIVING'},
{'distance': {'text': '0.2 km', 'value': 242},
'duration': {'text': '1 min', 'value': 66},
'end_location': {'lat': 56.1614567,
'lng': 15.5886974},
'html_instructions': 'Turn <b>left</b> onto '
'<b>Stortorget</b>',
'maneuver': 'turn-left',
'polyline': {'points': 'e|wuIsdc~A@o@?w@DsCF{Fs@m@WAQAo@p@'},
'start_location': {'lat': 56.16083,
'lng': 15.5861798},
'travel_mode': 'DRIVING'},
{'distance': {'text': '0.6 km', 'value': 631},
'duration': {'text': '2 mins', 'value': 137},
'end_location': {'lat': 56.1671299,
'lng': 15.5889503},
'html_instructions': 'Slight <b>right</b> onto '
'<b>Norra Smedjegatan</b>',
'maneuver': 'turn-slight-right',
'polyline': {'points': 'c`xuIktc~AyBCeB?{FM{DEs@CwACwDEqCK'},
'start_location': {'lat': 56.1614567,
'lng': 15.5886974},
'travel_mode': 'DRIVING'},
# 256 rader borttagna för forumets skull…
{'distance': {'text': '68 m', 'value': 68},
'duration': {'text': '1 min', 'value': 16},
'end_location': {'lat': 56.6749103,
'lng': 12.8584486},
'html_instructions': 'Turn <b>left</b> onto '
'<b>Klammerdammsgatan</b><div '
'style="font-size:0.9em">Restricted '
'usage road</div>',
'maneuver': 'turn-left',
'polyline': {'points': 'mh|xIcsnmAEt@OlCAT'},
'start_location': {'lat': 56.67478910000001,
'lng': 12.8595423},
'travel_mode': 'DRIVING'},
{'distance': {'text': '61 m', 'value': 61},
'duration': {'text': '1 min', 'value': 15},
'end_location': {'lat': 56.6743775,
'lng': 12.8582172},
'html_instructions': 'Turn <b>left</b> onto '
'<b>Storgatan</b><div '
'style="font-size:0.9em">Restricted '
'usage road</div>',
'maneuver': 'turn-left',
'polyline': {'points': 'ei|xIilnmA|Aj@J@'},
'start_location': {'lat': 56.6749103,
'lng': 12.8584486},
'travel_mode': 'DRIVING'}],
'via_waypoint': []}],
'overview_polyline': {'points': 'y~wuI{dc~AzAsFuAmHk_@JaEfG{LyBw[mz@_Uy{@qUwRgOqEqR{Wy]tMsPbEwDkB_d@hi@_f@`SuL~NqTfp@Dl`ApTduBfB`vB|Gx}@jIxv@~Rpq@~LjfB~Hdn@lGlnAtIr{De@zw@eJliB}Fr~BA`rBgC~sAyQ|pBgLjsBcKfn@m^`{@mP`{ByOxt@{Thj@oj@nxAoJn_Am@b}@tGffAjN|x@zg@ddChL|z@xA~t@{Hn|BsKtyBfC`yBlx@dfF~UnrBiEnvBvAnv@bL|v@jHvv@Pj}@bAhfBjGnz@jPp`Aji@zbBfNpu@rEfx@rF~|CbDrzAyXtdAeFx^|E||ApUxpDxGz~@cBnpAiCbmAkKl}@Ixm@dKnm@bWv{@h_@t_BfDvq@mC~aAvPdnBnClqCpDp|@`Mhr@nQre@fCfOga@zhDoK~b@_kAdqCsQte@}c@x^kjAvwAqg@|}@mZxpAub@ptB{QzQc[tHmV|UmK|D_b@jN_aAro@_WhKco@z[aRxF}}@hKkn@~Hcl@gDak@kVyMtE{MfRkd@|l@czB~_Bi_@bBig@jf@ga@`Pi`@rMwi@tf@cb@`Tea@bIc`@vFk]~d@qZtYyMxPwH|YuBxzAnBxkAxHbkBkKzlBkLtw@nEjg@pW`ZfBfNeO`x@uJtpDc`@l`Aj@~MfDlNdQ|_@pB|l@i@rrA`Jhr@pYhm@fa@hu@zYfeAvBdJsEv]MxYuJjuAqIjt@fCnjAnIhaAmJ~{@{CjxA|@~|BbGvt@fAbtA~Afq@eQl}@yXrnBoe@`oBz@|`@bKviAxDtvBDlb@pAr[vVzpDv@ho@ID@d@yf@buCo_@hhAcqA|xCkb@hfAoKznAyRjcBcYddAu_@to@iPjk@eF|mAoOrhAc^b_AgQhu@iZ~qE{i@||Bc@rjA`MpaBwDvyC{CxwCiLzbCi@je@qEngAgz@hfCeKj]s_@n~BwCjz@xA|_@|YzpB|ApyA{NpsEqQr}BfArlAkJnl@uhAnhBeOhd@}L`vADpc@`TjeAhQ~_AwD||@m\\||Cq_@tnB__AnyE__@`cCuM`y@gE|`AmSlpCcNp{BkRxn@sWfcB`DpjB`MdcA|Izy@oBht@gI`l@qPj`@s\\~`@uOre@{Mho@gKt~A}AxbEwEvrD`@z|AgQdn@wPzYa|Ar}Bsl@lj@cR~]qOlj@an@|xAocAhwBwd@h{@ef@xr@_ZzL_TiGoVx@qLpJs`@lxAaj@rv@ik@dt@mq@dg@}IxOkqAz~Dkq@~xBe@`KaFDwFdJpAfG'},
'summary': 'E22 and Route 15',
'warnings': [],
'waypoint_order': []}]
Dold text
Det är alltså inte precis bara en enkel sträng där väganvisningar står i klartext, utan snarare en lista nästlad med listor, dictionaries och strängar.
För att få mer information om det dataformat som Google returnerar så kan man läsa dokumentationen för "Google Maps Directions API".
Ett exempel för att enbart få ut HTML-väganvisningarna för det första ruttförslaget vore:
>>> import googlemaps
>>> gmaps = googlemaps.Client(key='AIzaSyCWc412ea7lCr1A96bUnKbcIsEEh6FOz-g')
>>> my_directions = gmaps.directions('Karlskrona', 'Halmstad')
>>> steps = my_directions[0]['legs'][0]['steps']
>>> print('\n'.join(step['html_instructions'] for step in steps))
Head <b>south</b> toward <b>Stortorget</b>
Turn <b>left</b> onto <b>Stortorget</b>
Slight <b>right</b> onto <b>Norra Smedjegatan</b>
Turn <b>left</b> onto <b>Skeppsbrokajen</b>
Turn <b>right</b> onto <b>Österleden/Route 28</b>
Take the exit toward <b>Malmö/Ronneby/Göteborg</b>
Continue onto <b>Sunnavägen</b>
At the roundabout, take the <b>2nd</b> exit onto <b>Ronnebyvägen</b>
Merge onto <b>E22</b>
At the roundabout, take the <b>2nd</b> exit and stay on <b>E22</b>
Exit onto <b>Pukaviksvägen/Route 15</b><div style="font-size:0.9em">Continue to follow Route 15</div>
At the roundabout, take the <b>2nd</b> exit onto <b>Pukaviksvägen/Route 15</b><div style="font-size:0.9em">Continue to follow Route 15</div>
Turn <b>right</b> to stay on <b>Route 15</b>
At the roundabout, take the <b>2nd</b> exit and stay on <b>Route 15</b>
Continue onto <b>Ågatan/Route 15</b><div style="font-size:0.9em">Continue to follow Route 15</div>
At the roundabout, take the <b>2nd</b> exit and stay on <b>Route 15</b>
At the roundabout, take the <b>2nd</b> exit and stay on <b>Route 15</b>
At the roundabout, take the <b>2nd</b> exit and stay on <b>Route 15</b>
Continue onto <b>Laholmsvägen</b>
Continue onto <b>Viktoriagatan</b>
Slight <b>right</b> to stay on <b>Viktoriagatan</b>
Turn <b>right</b> onto <b>Strandgatan</b>
Turn <b>left</b> to stay on <b>Strandgatan</b><div style="font-size:0.9em">Parts of this road are closed Sat–Sun 12:00 – 4:00 am</div>
<b>Strandgatan</b> turns <b>left</b> and becomes <b>Österbro</b>
Turn <b>right</b> onto <b>Hamngatan</b>
Turn <b>left</b> onto <b>Klammerdammsgatan</b><div style="font-size:0.9em">Restricted usage road</div>
Turn <b>left</b> onto <b>Storgatan</b><div style="font-size:0.9em">Restricted usage road</div>
Hur långt du ska köra på varje sträcka, hur lång tid det tar, etc., är ju just den extra information som gör att strukturen är mer komplex än "bara en sträng". Det är bara att hantera som du vill.
Visa signatur
Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.
Citera flera
Citera
(5)
Skrivet av phz:
Om du läser i dokumentationen för html.parser.HTMLParser
så ser du dels ett exempel på hur klassen används, och dels att dess feed
-metod tar en sträng som input. Du försöker skicka in my_directions
, som är en lista (det kan vi antingen kontrollera själva, eller läsa dokumentationen för modulen), och det går inte för sig, precis som Python säger:
TypeError: Can't convert 'list' object to str implicitly
Det går inte att blint tolka en lista som en sträng.
För att få en bild av hur dataformatet du hämtar ser ut så kan vi skriva ut det:
>>> import googlemaps
>>> gmaps = googlemaps.Client(key='AIzaSyCWc412ea7lCr1A96bUnKbcIsEEh6FOz-g')
>>> my_directions = gmaps.directions('Karlskrona', 'Halmstad')
>>> from pprint import pprint
>>> pprint(my_directions)
[{'bounds': {'northeast': {'lat': 56.67478910000001, 'lng': 15.6156104},
'southwest': {'lat': 56.1607924, 'lng': 12.8582172}},
'copyrights': 'Map data ©2015 Google',
'legs': [{'distance': {'text': '212 km', 'value': 212390},
'duration': {'text': '2 hours 47 mins', 'value': 10017},
'end_address': 'Halmstad, Sweden',
'end_location': {'lat': 56.6743775, 'lng': 12.8582172},
'start_address': 'Karlskrona, Sweden',
'start_location': {'lat': 56.1612464, 'lng': 15.5862243},
'steps': [{'distance': {'text': '46 m', 'value': 46},
'duration': {'text': '1 min', 'value': 12},
'end_location': {'lat': 56.16083,
'lng': 15.5861798},
'html_instructions': 'Head <b>south</b> toward '
'<b>Stortorget</b>',
'polyline': {'points': 'y~wuI{dc~ArAF'},
'start_location': {'lat': 56.1612464,
'lng': 15.5862243},
'travel_mode': 'DRIVING'},
{'distance': {'text': '0.2 km', 'value': 242},
'duration': {'text': '1 min', 'value': 66},
'end_location': {'lat': 56.1614567,
'lng': 15.5886974},
'html_instructions': 'Turn <b>left</b> onto '
'<b>Stortorget</b>',
'maneuver': 'turn-left',
'polyline': {'points': 'e|wuIsdc~A@o@?w@DsCF{Fs@m@WAQAo@p@'},
'start_location': {'lat': 56.16083,
'lng': 15.5861798},
'travel_mode': 'DRIVING'},
{'distance': {'text': '0.6 km', 'value': 631},
'duration': {'text': '2 mins', 'value': 137},
'end_location': {'lat': 56.1671299,
'lng': 15.5889503},
'html_instructions': 'Slight <b>right</b> onto '
'<b>Norra Smedjegatan</b>',
'maneuver': 'turn-slight-right',
'polyline': {'points': 'c`xuIktc~AyBCeB?{FM{DEs@CwACwDEqCK'},
'start_location': {'lat': 56.1614567,
'lng': 15.5886974},
'travel_mode': 'DRIVING'},
# 256 rader borttagna för forumets skull…
{'distance': {'text': '68 m', 'value': 68},
'duration': {'text': '1 min', 'value': 16},
'end_location': {'lat': 56.6749103,
'lng': 12.8584486},
'html_instructions': 'Turn <b>left</b> onto '
'<b>Klammerdammsgatan</b><div '
'style="font-size:0.9em">Restricted '
'usage road</div>',
'maneuver': 'turn-left',
'polyline': {'points': 'mh|xIcsnmAEt@OlCAT'},
'start_location': {'lat': 56.67478910000001,
'lng': 12.8595423},
'travel_mode': 'DRIVING'},
{'distance': {'text': '61 m', 'value': 61},
'duration': {'text': '1 min', 'value': 15},
'end_location': {'lat': 56.6743775,
'lng': 12.8582172},
'html_instructions': 'Turn <b>left</b> onto '
'<b>Storgatan</b><div '
'style="font-size:0.9em">Restricted '
'usage road</div>',
'maneuver': 'turn-left',
'polyline': {'points': 'ei|xIilnmA|Aj@J@'},
'start_location': {'lat': 56.6749103,
'lng': 12.8584486},
'travel_mode': 'DRIVING'}],
'via_waypoint': []}],
'overview_polyline': {'points': 'y~wuI{dc~AzAsFuAmHk_@JaEfG{LyBw[mz@_Uy{@qUwRgOqEqR{Wy]tMsPbEwDkB_d@hi@_f@`SuL~NqTfp@Dl`ApTduBfB`vB|Gx}@jIxv@~Rpq@~LjfB~Hdn@lGlnAtIr{De@zw@eJliB}Fr~BA`rBgC~sAyQ|pBgLjsBcKfn@m^`{@mP`{ByOxt@{Thj@oj@nxAoJn_Am@b}@tGffAjN|x@zg@ddChL|z@xA~t@{Hn|BsKtyBfC`yBlx@dfF~UnrBiEnvBvAnv@bL|v@jHvv@Pj}@bAhfBjGnz@jPp`Aji@zbBfNpu@rEfx@rF~|CbDrzAyXtdAeFx^|E||ApUxpDxGz~@cBnpAiCbmAkKl}@Ixm@dKnm@bWv{@h_@t_BfDvq@mC~aAvPdnBnClqCpDp|@`Mhr@nQre@fCfOga@zhDoK~b@_kAdqCsQte@}c@x^kjAvwAqg@|}@mZxpAub@ptB{QzQc[tHmV|UmK|D_b@jN_aAro@_WhKco@z[aRxF}}@hKkn@~Hcl@gDak@kVyMtE{MfRkd@|l@czB~_Bi_@bBig@jf@ga@`Pi`@rMwi@tf@cb@`Tea@bIc`@vFk]~d@qZtYyMxPwH|YuBxzAnBxkAxHbkBkKzlBkLtw@nEjg@pW`ZfBfNeO`x@uJtpDc`@l`Aj@~MfDlNdQ|_@pB|l@i@rrA`Jhr@pYhm@fa@hu@zYfeAvBdJsEv]MxYuJjuAqIjt@fCnjAnIhaAmJ~{@{CjxA|@~|BbGvt@fAbtA~Afq@eQl}@yXrnBoe@`oBz@|`@bKviAxDtvBDlb@pAr[vVzpDv@ho@ID@d@yf@buCo_@hhAcqA|xCkb@hfAoKznAyRjcBcYddAu_@to@iPjk@eF|mAoOrhAc^b_AgQhu@iZ~qE{i@||Bc@rjA`MpaBwDvyC{CxwCiLzbCi@je@qEngAgz@hfCeKj]s_@n~BwCjz@xA|_@|YzpB|ApyA{NpsEqQr}BfArlAkJnl@uhAnhBeOhd@}L`vADpc@`TjeAhQ~_AwD||@m\\||Cq_@tnB__AnyE__@`cCuM`y@gE|`AmSlpCcNp{BkRxn@sWfcB`DpjB`MdcA|Izy@oBht@gI`l@qPj`@s\\~`@uOre@{Mho@gKt~A}AxbEwEvrD`@z|AgQdn@wPzYa|Ar}Bsl@lj@cR~]qOlj@an@|xAocAhwBwd@h{@ef@xr@_ZzL_TiGoVx@qLpJs`@lxAaj@rv@ik@dt@mq@dg@}IxOkqAz~Dkq@~xBe@`KaFDwFdJpAfG'},
'summary': 'E22 and Route 15',
'warnings': [],
'waypoint_order': []}]
Dold text
Det är alltså inte precis bara en enkel sträng där väganvisningar står i klartext, utan snarare en lista nästlad med listor, dictionaries och strängar.
För att få mer information om det dataformat som Google returnerar så kan man läsa dokumentationen för "Google Maps Directions API".
Ett exempel för att enbart få ut HTML-väganvisningarna för det första ruttförslaget vore:
>>> import googlemaps
>>> gmaps = googlemaps.Client(key='AIzaSyCWc412ea7lCr1A96bUnKbcIsEEh6FOz-g')
>>> my_directions = gmaps.directions('Karlskrona', 'Halmstad')
>>> steps = my_directions[0]['legs'][0]['steps']
>>> print('\n'.join(step['html_instructions'] for step in steps))
Head <b>south</b> toward <b>Stortorget</b>
Turn <b>left</b> onto <b>Stortorget</b>
Slight <b>right</b> onto <b>Norra Smedjegatan</b>
Turn <b>left</b> onto <b>Skeppsbrokajen</b>
Turn <b>right</b> onto <b>Österleden/Route 28</b>
Take the exit toward <b>Malmö/Ronneby/Göteborg</b>
Continue onto <b>Sunnavägen</b>
At the roundabout, take the <b>2nd</b> exit onto <b>Ronnebyvägen</b>
Merge onto <b>E22</b>
At the roundabout, take the <b>2nd</b> exit and stay on <b>E22</b>
Exit onto <b>Pukaviksvägen/Route 15</b><div style="font-size:0.9em">Continue to follow Route 15</div>
At the roundabout, take the <b>2nd</b> exit onto <b>Pukaviksvägen/Route 15</b><div style="font-size:0.9em">Continue to follow Route 15</div>
Turn <b>right</b> to stay on <b>Route 15</b>
At the roundabout, take the <b>2nd</b> exit and stay on <b>Route 15</b>
Continue onto <b>Ågatan/Route 15</b><div style="font-size:0.9em">Continue to follow Route 15</div>
At the roundabout, take the <b>2nd</b> exit and stay on <b>Route 15</b>
At the roundabout, take the <b>2nd</b> exit and stay on <b>Route 15</b>
At the roundabout, take the <b>2nd</b> exit and stay on <b>Route 15</b>
Continue onto <b>Laholmsvägen</b>
Continue onto <b>Viktoriagatan</b>
Slight <b>right</b> to stay on <b>Viktoriagatan</b>
Turn <b>right</b> onto <b>Strandgatan</b>
Turn <b>left</b> to stay on <b>Strandgatan</b><div style="font-size:0.9em">Parts of this road are closed Sat–Sun 12:00 – 4:00 am</div>
<b>Strandgatan</b> turns <b>left</b> and becomes <b>Österbro</b>
Turn <b>right</b> onto <b>Hamngatan</b>
Turn <b>left</b> onto <b>Klammerdammsgatan</b><div style="font-size:0.9em">Restricted usage road</div>
Turn <b>left</b> onto <b>Storgatan</b><div style="font-size:0.9em">Restricted usage road</div>
Hur långt du ska köra på varje sträcka, hur lång tid det tar, etc., är ju just den extra information som gör att strukturen är mer komplex än "bara en sträng". Det är bara att hantera som du vill.
Tack, de funka skit bra. Har bara liten fundering runt, steps = my_directions[0]['legs'][0]['steps']
är detta något från python eller är den syntaxen specifik för google maps. Är ny till python och har inte hittat något om dessa 3 [] är de listor man pratar om?
{
"destination_addresses" : [ "San Francisco, Californie, États-Unis", "Victoria, BC, Canada" ],
"origin_addresses" : [ "Vancouver, BC, Canada", "Seattle, Washington, États-Unis" ],
"rows" : [
{
"elements" : [
{
"distance" : {
"text" : "1 706 km",
"value" : 1705627
},
"duration" : {
"text" : "3 jours 19 heures",
"value" : 327061
},
"status" : "OK"
},
{
"distance" : {
"text" : "139 km",
"value" : 138549
},
"duration" : {
"text" : "6 heures 42 minutes",
"value" : 24146
},
"status" : "OK"
}
]
},
{
"elements" : [
{
"distance" : {
"text" : "1 449 km",
"value" : 1449084
},
"duration" : {
"text" : "3 jours 4 heures",
"value" : 274649
},
"status" : "OK"
},
{
"distance" : {
"text" : "146 km",
"value" : 146496
},
"duration" : {
"text" : "2 heures 52 minutes",
"value" : 10324
},
"status" : "OK"
}
]
}
],
"status" : "OK"
}
Detta är utskriften från distance, direction är fixad. Men så om jag använder [0]['rows'] betyder det att jag kollar första plats i rows? Och där ligger elements, så om jag skriver [0]['elements'] så får jag ut distance? Jag har ingen aning måste kolla upp listor i python.
Senast redigerat
Visa signatur
CPU: Intel core i5 3450 | GPU: Asus Radeon HD 7870 | PSU: Corsair GS 600W | Moderkort: MSI b75a-g43 | HDD WD blue 500 GB | RAM: Crucial ballistiX 2x4gb DDR3 1600MHz | Ljudkort: Asus Xonar DG |
Citera flera
Citera
Skrivet av turbogeten:
Tack, de funka skit bra. Har bara liten fundering runt, steps = my_directions[0]['legs'][0]['steps']
är detta något från python eller är den syntaxen specifik för google maps. Är ny till python och har inte hittat något om dessa 3 [] är de listor man pratar om?
Hakparenteser används för att specificera index i Python (och de flesta andra språk, med vissa variationer) för både
sekvenser (exempelvis strängar, listor, tuplar) via numeriska index och
mappningar (exempelvis dictionaries) via mer godtyckliga (hashbara) index (snarare kallade "nycklar" i detta fall).
Listor respektive dictionaries skapas i Python med dess inbyggda "snabbsyntax" likt:
min_lista = [listelement_1, listelement_2, listelement_3]
min_dictionary = {'dictindex_1': dictelement_1, 'dictindex_2': dictelement_2, 'dictindex_3': dictelement_3}
dvs
hakparenteser med en kommaseparerad uppräkning av värden för att skapa en lista
måsvingar med en kommaseparerad uppräkning av
nyckel: värde
-poster för att skapa en dictionary.
I utskriften av datastrukturen my_directions
såg man genom att studera hakparenteser och måsvingar att
det var en lista där vi ville titta på första elementet (index
0
enligt gammal konvention)som var en dictionary där vi ville titta på värdet tillhörande nyckeln
'legs'
som pekade på en lista där vi ville titta på första elementet (index
0
enligt gammal konvention)som var en dictionary där vi ville titta på värdet tillhörande nyckeln
'steps'
som gav ytterligare en lista som vi senare kunde behandla vidare i nästa steg.
Vi kontrollerar:
>>> import googlemaps
>>> gmaps = googlemaps.Client(key='AIzaSyCWc412ea7lCr1A96bUnKbcIsEEh6FOz-g')
>>> my_directions = gmaps.directions('Karlskrona', 'Halmstad')
>>> type(my_directions)
<class 'list'>
>>> type(my_directions[0])
<class 'dict'>
>>> type(my_directions[0]['legs'])
<class 'list'>
>>> type(my_directions[0]['legs'][0])
<class 'dict'>
>>> type(my_directions[0]['legs'][0]['steps'])
<class 'list'>
När vi lägger på fler hakparanteser på my_directions
så vandrar vi alltså bara längre och längre ned i strukturen.
Hur de inbyggda datatyperna fungerar grovt är ett av de allra första stegen att lära sig för att förstå någon Python-kod, så om det inte sitter så se till att köra genom grunderna.
Skrivet av turbogeten:
{
"destination_addresses" : [ "San Francisco, Californie, États-Unis", "Victoria, BC, Canada" ],
"origin_addresses" : [ "Vancouver, BC, Canada", "Seattle, Washington, États-Unis" ],
"rows" : [
{
"elements" : [
{
"distance" : {
"text" : "1 706 km",
"value" : 1705627
},
"duration" : {
"text" : "3 jours 19 heures",
"value" : 327061
},
"status" : "OK"
},
{
"distance" : {
"text" : "139 km",
"value" : 138549
},
"duration" : {
"text" : "6 heures 42 minutes",
"value" : 24146
},
"status" : "OK"
}
]
},
{
"elements" : [
{
"distance" : {
"text" : "1 449 km",
"value" : 1449084
},
"duration" : {
"text" : "3 jours 4 heures",
"value" : 274649
},
"status" : "OK"
},
{
"distance" : {
"text" : "146 km",
"value" : 146496
},
"duration" : {
"text" : "2 heures 52 minutes",
"value" : 10324
},
"status" : "OK"
}
]
}
],
"status" : "OK"
}
Detta är utskriften från distance, direction är fixad. Men så om jag använder [0]['rows'] betyder det att jag kollar första plats i rows? Och där ligger elements, så om jag skriver [0]['elements'] så får jag ut distance?
Måsvingar i utskriften pekar på att något är en dictionary; hakparenteser att något är en lista. För att nå exempelvis strängen '6 heures 42 minutes'
i ovanstående struktur med namn my_distances
så får man gå enligt:
my_distances['rows'][0]['elements'][1]['duration']['text']
Skrivet av turbogeten:
Jag har ingen aning måste kolla upp listor i python.
Listor och dictionaries, tuplar, strängar och gärna andra inbyggda datatyper (finns inte jättemånga) behöver man plugga in. Därefter kan man gå vidare med att titta på hur man loopar över dessa strukturer, och sedan är man på god väg att lära sig tänka i Python!
Senast redigerat
Mer färg!
Visa signatur
Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.
Citera flera
Citera
(4)
@phz:
Du är underbar, tack så mycket för hjälpen. Detta kommer hjälpa mig enormt
Visa signatur
CPU: Intel core i5 3450 | GPU: Asus Radeon HD 7870 | PSU: Corsair GS 600W | Moderkort: MSI b75a-g43 | HDD WD blue 500 GB | RAM: Crucial ballistiX 2x4gb DDR3 1600MHz | Ljudkort: Asus Xonar DG |
Citera flera
Citera
Hårdvara
- Igår AMD, Nvidia och Intel – vad är det för skillnad mellan grafikkortstillverkarna? 9
- Igår Testpilot: MSI MPG 271QRX - Färgsprakande OLED i 360 Hz 13
- 23 / 4 Meta öppnar upp Quests OS – vill bli VR-världens Android 12
- 23 / 4 Googles nästa Chromecast får dubblerad lagring 74
- 23 / 4 EK Water Blocks lovar bot och bättring 16
Mjukvara
Övrigt
Datorkomponenter
Ljud, bild och kommunikation
- Viaplay sätter ner foten mot delade konton33
- Mini PC som klarar 4K 120Hz över HDMI7
- Nyhetstips!425
- Veckans fråga: Hur mycket lagringsutrymme har din dator?82
- Systembolaget varnar: Dryckesbrist efter hackerattack58
- Tråden om PlayStation 514570
- Kan inte ansluta "smart-plug" till ny Telia router Technicolor EWA 133010
- Tråden för 2-kanals stereo med högtalare642
- Ny TV har skada i panel, butik menar att de inte kan återskapa felet21
- Gamingskärm - ultrawide eller inte?19
- Köpes i7 12th 13 14 gen
- Säljes 64 Gig DDR5 2x32Gig, 6000MT/s CL36-38-38 1.35V EXPO/XMP
- Säljes Gamingdator I9-13900KF - 7800 XT - Z690 - DDR5 32GB - Define 7
- Säljes T700 2TB M2 SSD. Lian Li Strimer 24pin. Vertical mount
- Säljes Dell Poweredge R330
- Bytes 3070 MSI Suprim X mot Strix
- Säljes Sapphire pulse 6700xt
- Säljes XPS 9370
- Säljes Gigabyte GeForce RTX 4080 16GB GAMING OC
- Säljes Gamingtillbehör - HyperX, Logitech
- Viaplay sätter ner foten mot delade konton33
- AMD, Nvidia och Intel – vad är det för skillnad mellan grafikkortstillverkarna?9
- Systembolaget varnar: Dryckesbrist efter hackerattack58
- Veckans fråga: Hur mycket lagringsutrymme har din dator?82
- Valve täpper till kryphål i Steam-återbetalningar18
- Testpilot: MSI MPG 271QRX - Färgsprakande OLED i 360 Hz13
- Google skjuter på utfasning av tredjepartskakor till 202516
- Skadlig kod sprids via lömska Github-länkar13
- Microsoft blockerar äldre processorer i Windows 11 24H236
- Meta öppnar upp Quests OS – vill bli VR-världens Android12