Toon posts:

Python code proper maken

Pagina: 1
Acties:

Vraag


  • Yarisken
  • Registratie: Augustus 2010
  • Laatst online: 20:53
Hallo,

Om te leren werken met python en te leren programmeren ben ik een , voor mij , nuttig projectje gestart om de prijs van aandelen uit te lezen.
Bedoeling is dat ik met beautifulsoup de waarde kan scrapen, opslaan in een txt file en dan uitlees met zabbix.

Het aandeel wordt opgeslagen als bv 13,250. Ik wil enkel de waarde voor de komma dus 13.
Wat ik doe is van een string naar een float gaan, dan naar een integer en dan terug naar een string.
Andere opties gaven steevast een error. De integer kan ik bv niet opslaan in de bpost.txt file, daarvoor moet ik er eerst een string van maken ....

Alles werkt hoe ik het wil alleen had ik graag wat tips gekregen om het anders / properder te doen.


#import libraries
import urllib2
from bs4 import BeautifulSoup

bpost_page = 'https://www.beursduivel.be/Aandeel-Koers/60010228/bpost.aspx'
page = urllib2.urlopen(bpost_page)
soup = BeautifulSoup(page, 'html.parser')

bpost_box = soup.find(id="60010228LastPrice")
bpost = bpost_box.text.strip()
bpost = float(bpost.replace(",","."))
bpost = int(bpost)
bpost = str(bpost)


file = open("bpost.txt","w")
file.write(bpost)
file.close

Alle reacties


  • Flamesz
  • Registratie: Oktober 2010
  • Laatst online: 26-03 19:08
Misschien is het netter om in de originele string te kijken op welke positie de komma staat, en dan alles vanaf die positie weg te gooien?

  • Daedalus
  • Registratie: Mei 2002
  • Niet online

Daedalus

Moderator Apple Talk

Keep tryin'

“You know what I've noticed Hobbes? Things don't bug you if you don't think about them. So from now on, I simply won't think about anything I don't like, and I'll be happy all the time!” | 宇多田ヒカル \o/


  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 26-03 18:25
Beter str.split(",") en dan alleen eerste element pakken.

Python:
1
bpost = "12,350".split(",")[0]

[Voor 33% gewijzigd door Morrar op 31-10-2018 07:38]


  • fiftyhillswest
  • Registratie: Oktober 2009
  • Laatst online: 26-03 16:08
Let op, de code van @Morrar werkt, als je er zeker van bent dat het scheidingssymbool altijd een komma is. Komma's en punten worden op verschillende manieren gebruikt in het weergeven van geldbedragen afhankelijk van de locale. Verzeker jezelf ervan dat dit altijd goed gaat, want anders krijg je mogelijk onverwachte resultaten.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 27-01 12:24

drm

f0pc0dert

Dit is echt een kwestie van smaak. Je eerste implementatie mankeert eigenlijk niks aan, mits het de use case dient waar je het voor gemaakt hebt. Het enige wat ik aan te merken heb is dat je de str()-aanroep niet op een -voor mij- logische plek doet en dat daarom verwarrend is waarom je het doet. Als je dat doet op het moment dat je hem write, dan is dat evident (en zou ik er persoonlijk voor kiezen om die call te nesten en niet de variabele te hergebruiken).

Maar nogmaals: kwestie van smaak.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz
[ melp.nl | twitter ]


  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

Flamesz schreef op dinsdag 30 oktober 2018 @ 23:16:
Misschien is het netter om in de originele string te kijken op welke positie de komma staat, en dan alles vanaf die positie weg te gooien?
Morrar schreef op woensdag 31 oktober 2018 @ 07:35:
Beter str.split(",") en dan alleen eerste element pakken.
Waarom is dat netter/beter?

[Voor 41% gewijzigd door .oisyn op 31-10-2018 13:46]

If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"


  • Flamesz
  • Registratie: Oktober 2010
  • Laatst online: 26-03 19:08
.oisyn schreef op woensdag 31 oktober 2018 @ 13:45:
[...]


[...]

Waarom is dat netter/beter?
Omdat je het dan in 2 stappen doet, in plaats van 4. En je hoeft niet 3 keer van type te veranderen.

Ik ben overigens geen expert in clean code, laat staan programmeur van beroep, dus hecht niet te veel waarde aan mijn mening.

De vraag was overigens niet alleen hoe het netter kan, maar ook hoe het überhaupt anders kan.

  • CurlyMo
  • Registratie: Februari 2011
  • Nu online

CurlyMo

www.pilight.org

Ik zou het zo doen:
Python:
1
2
3
4
bpost = '13,470'
bpost = bpost.replace(',', '.')
bpost = float(bpost)
bpost = '{:,.0f}'.format(bpost)


De formatting geeft nog iets van error checking. Je zou ook nog kunnen kijken naar je locale instelling, zodat python de komma decimal delimiter correct interpreteert.

Bewust niet als one-liner om aan te sluiten bij de manier van TS

geen vragen via PM die ook op het forum gesteld kunnen worden.


  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

Flamesz schreef op woensdag 31 oktober 2018 @ 13:53:
[...]


Omdat je het dan in 2 stappen doet, in plaats van 4. En je hoeft niet 3 keer van type te veranderen.
Minder stappen is niet per se netter natuurlijk.
De vraag was overigens niet alleen hoe het netter kan, maar ook hoe het überhaupt anders kan.
Dat klopt, maar jij zei dat het zo misschien netter was. Ik vraag naar je argumentatie daarvan :)

We hebben het over een string-representatie van een bepaalde entiteit, in dit geval een kommadrijvend getal. Het is, over het algemeen, beter om de string-representatie eerst te deserializen naar een object wat je gewoon kunt manipuleren, ipv zelf met string-functies te gaan zitten frutsen.

Stel de waarde was opgeschreven als '12,3e4'. Dan wil je wellicht dat je daar 123000 van maakt, en niet 12. Als je het origineel had geïnterpreteerd als float dan had dat gewoon gewerkt.
CurlyMo schreef op woensdag 31 oktober 2018 @ 14:08:
Ik zou het zo doen:
Python:
1
2
3
4
bpost = '13,470'
bpost = bpost.replace(',', '.')
bpost = float(bpost)
bpost = '{:,.0f}'.format(bpost)
Ik geloof niet dat de TS heeft gezegd dat hij wil afronden. Dat is wel wat jouw code doet. :)

If I had a dollar for every time I didn't know what was going on, I'd be like: "Why am I always getting all this money?!"


  • CurlyMo
  • Registratie: Februari 2011
  • Nu online

CurlyMo

www.pilight.org

.oisyn schreef op woensdag 31 oktober 2018 @ 14:43:
[...]
Ik geloof niet dat de TS heeft gezegd dat hij wil afronden. Dat is wel wat jouw code doet. :)
Goed punt :) Dan is wat TS al doet het makkelijkste.

geen vragen via PM die ook op het forum gesteld kunnen worden.


  • Yarisken
  • Registratie: Augustus 2010
  • Laatst online: 20:53
Idd afronden wil ik niet :). Idd is het beter van de str uit te voeren bij het wegschrijven. Bedankt voor de feedback allemaal.

  • Puch-Maxi
  • Registratie: December 2003
  • Laatst online: 21:22
De volgende stap is natuurlijk dat je dit ook voor andere bedrijven wil doen. Wat je dan kunt doen is één of meerdere functies aanmaken voor bijvoorbeeld de parser en de processing :).

My favorite programming language is solder.


  • Yarisken
  • Registratie: Augustus 2010
  • Laatst online: 20:53
Puch-Maxi schreef op woensdag 31 oktober 2018 @ 15:56:
De volgende stap is natuurlijk dat je dit ook voor andere bedrijven wil doen. Wat je dan kunt doen is één of meerdere functies aanmaken voor bijvoorbeeld de parser en de processing :).
Idd en dan alles in een lijst steken of nog beter in een database. Het gaan snel 40 - 50 aandelen worden ....
Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee