Cookies op Tweakers

Tweakers is onderdeel van DPG Media en maakt gebruik van cookies, JavaScript en vergelijkbare technologie om je onder andere een optimale gebruikerservaring te bieden. Ook kan Tweakers hierdoor het gedrag van bezoekers vastleggen en analyseren. Door gebruik te maken van deze website, of door op 'Cookies accepteren' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt? Bekijk dan ons cookiebeleid.

Meer informatie
Toon posts:

Python code proper maken

Pagina: 1
Acties:

Vraag


  • Yarisken
  • Registratie: augustus 2010
  • Laatst online: 10:40
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: 17:34
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: 20-06 19:58
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: 18-06 10:34
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: 05-06 23:47

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
  • Laatst online: 08:45

.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]

You see, killbots have a preset kill limit. Knowing their weakness, I sent wave after wave of my own men at them until they reached their limit and shut down. Kif, show them the medal I won.


  • Flamesz
  • Registratie: oktober 2010
  • Laatst online: 17:34
.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
  • Laatst online: 17:48

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
  • Laatst online: 08:45

.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. :)

You see, killbots have a preset kill limit. Knowing their weakness, I sent wave after wave of my own men at them until they reached their limit and shut down. Kif, show them the medal I won.


  • CurlyMo
  • Registratie: februari 2011
  • Laatst online: 17:48

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: 10:40
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: 20-06 12:26
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: 10:40
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


Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Microsoft Xbox Series X LG CX Google Pixel 5a 5G Sony XH90 / XH92 Samsung Galaxy S21 5G Sony PlayStation 5 Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True