Python – Tips & Tricks
Hier vind je een aantal handige “Tips & Tricks” voor de python programmeertaal.
Importeren van een bibliotheek
Je kan eigenlijk op 2 manieren een bibliotheek laden, geheel of een stukje ervan, dat zie je in veel scripts, een voorbeeld voor de SLEEP functie:
Geheel:
1 2 |
import time time.sleep(1) |
Of een gedeelte:
1 2 |
from time import sleep sleep(1) |
Scherm leegmaken
Windows:
1 2 |
import os os.system('cls') |
Linux:
1 2 |
import os os.system('clear') |
Cursor op locatie zetten
Maak gebruik van de “ANSI escape sequence”, waar ESC[y;xH de cursor verplaatst naar rij y en kolom x, een voorbeeld:
1 |
print "33[6;6HHallo Wereld" |
Python LOOP en bij CTRL+C (keyboard interrupt) goed afsluiten.
1 2 3 4 5 6 7 |
try: # Oneindige loop, druk op CTRL+C om het script te eindigen. while True: # Doe iets. except KeyboardInterrupt: # Dit stuk wordt uitgevoerd als er op CTRL+C is gedrukt. |
Python FOR LOOP
1 2 3 |
# Tel van 1 naar 100 for x in xrange(1, 101): print x |
Bestand import maken/gebruiken
Maak een bestand aan genaamd test.py met de inhoud:
1 2 3 4 |
#!/usr/bin/env python def hallo(): print 'Hallo Wereld!' |
Vanuit een ander python script is deze eenvoudig te importeren (zonder extensie)
1 2 3 4 |
#!/usr/bin/env python import test test.hallo() |
Bibliotheken import maken/gebruiken
Je kan je eigen bibliotheek schrijven, deze zijn veelal te vinden in een map als:
python\lib\pythonlib\site-packages\[bibliotheeknaam]
Maak een bestand aan in een bibliotheekfolder genaamd: __init__.py , deze wordt ingelezen zodra je de bibliotheek importeert/aanroept vanuit een python script.
In dat bestand kan je functies aanmaken met def naam():Â Â ,bijvoorbeeld:
1 2 3 4 |
#!/usr/bin/env python def hallo(): print 'Hallo Wereld!' |
Bovenstaande inhoud heb ik als voorbeeld gebruikt in het bestand:
python\lib\site-packages\hallowereld\__init__.py
Om nu een functie uit bovenstaande bibliotheek uit te voeren, is dit het script:
1 2 3 |
import hallowereld hallowereld.hallo() |
IP adres weergeven
Gebruik deze functie om het IP adres weer te geven:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import socket import fcntl import struct def get_ip_address(ifname): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) return socket.inet_ntoa(fcntl.ioctl( s.fileno(), 0x8915, # SIOCGIFADDR struct.pack('256s', ifname[:15]) )[20:24]) print get_ip_address('eth0') # '192.168.0.110' |
Gegevens downloaden van internet
Onderstaand stukje geeft een voorbeeld hoe je een internet pagina of bestand download:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# Importeren van bibliotheken # Bibliotheek om data te ontvangen en te versturen via het HTTP protocol. import urllib2 httpadres = "http://website.nl/pagina.html" bestand = "pagina.html" httpdata = urllib2.Request(httpadres) httphandle = urllib2.urlopen(httpdata) file = open(bestand, "w") file.write(httphandle.read()) file.close() |
Indien je een 403 error krijgt bij downloaden, dan zijn er headers nodig:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import urllib2 hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3', 'Accept-Encoding': 'none', 'Accept-Language': 'en-US,en;q=0.8', 'Connection': 'keep-alive'} req = urllib2.Request("http://site.com/settings.csv", headers=hdr) page = urllib2.urlopen(req) file = open("settings.csv", "wb") file.write(page.read()) file.close() |
Werken met hele kleine getallen
Als je een getal deelt, bijvoorbeeld 1/50, geeft python 2 een 0 terug, om met kleine getallen te werken moet je boven aan het script deze regel zetten:
from __future__ import division
nu is het resultaat: 0.02
Decimaal naar HEX
1 2 |
waarde = 153 hex(waarde)[2:].upper() |
Regels tellen in bestand
Kleine bestanden
1 2 |
regels = len(open(thefilepath).readlines( )) print regels |
Grote bestanden:
1 2 3 |
regels = 0 for line in open(thefilepath).xreadlines( ): regels += 1 print regels |
Als de lijn terminator “\n” is (zoals in windows of Mac):
1 2 3 4 5 6 7 8 |
count = 0 thefile = open(thefilepath, 'rb') while 1: buffer = thefile.read(8192*1024) if not buffer: break count += buffer.count('\n') thefile.close( ) print count |
Raspberry Pi serienummer weergeven (UID)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#!/usr/bin/python def getserial(): # Extract serial from cpuinfo file cpuserial = "0000000000000000" try: f = open('/proc/cpuinfo','r') for line in f: if line[0:6]=='Serial': cpuserial = line[10:26] f.close() except: cpuserial = "ERROR000000000" return cpuserial print getserial() |
Variable mapping (like arduino)
1 2 3 4 5 6 7 |
def valmap(value, istart, istop, ostart, ostop): return ostart + (ostop - ostart) * ((value - istart) / (istop - istart)) print '%-8s %-6s' % ('Input', 'Output') for x in range(21): inval = float((x - 10) / 10.0) print '%8.3f %6.1f' % (inval, valmap(inval, -1.0, 1.0, 0.0, 10.0)) |
Example script gpiozero with PWM ledstrip
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# Import libraries from __future__ import division from time import sleep from gpiozero import LEDBoard LEDSTRIP = LEDBoard(18, 12, 13, pwm=True) LEDSTRIP.value = (0, 0, 0) for x in range(255): kleur = valmap(x, 0, 255, 0, 1) LEDSTRIP.value = (kleur, 0, 0) sleep(.003) sleep(1) for x in range(255, 0, -1): kleur = valmap(x, 0, 255, 0, 1) LEDSTRIP.value = (kleur, 0, 0) sleep(.003) |
Read file from boot partition
1 2 3 4 5 6 7 8 9 10 11 |
import os # Mount the boot partition os.system('sudo mkdir /mnt/raspi-boot > /dev/null 2>&1') os.system('sudo mount /dev/mmcblk0p1 /mnt/raspi-boot > /dev/null 2>&1') # Read file from boot partition file = os.open("/mnt/raspi-boot/config.txt", os.O_RDONLY) data = os.read(file, 512) print data os.close(file) |
Read single line:
1 2 3 4 5 6 7 8 9 10 11 |
import os # Mount the boot partition os.system('sudo mkdir /mnt/raspi-boot > /dev/null 2>&1') os.system('sudo mount /dev/mmcblk0p1 /mnt/raspi-boot > /dev/null 2>&1') # Read configfile from boot partition file = open("/mnt/raspi-boot/webapi.txt", "r") data = file.readline() print data file.close() |
Run certain code every n seconds
1 2 3 4 5 6 7 8 9 10 11 12 13 |
startrepeat("print('Hello World')", .01) # Repeats print('Hello World') ever .01 seconds for i in range(5): print(i) >> Hello World! >> 0 >> 1 >> 2 >> Hello World! >> 3 >> Hello World! >> 4 |