Python

Allikas: Kuutõrvaja
Redaktsioon seisuga 25. veebruar 2010, kell 00:41 kasutajalt Imre (arutelu | kaastöö) (PostgreSQL andmebaasi kasutamine)

Sissejuhatus

Python http://www.python.org/ ...

2010 aastal on levinud kasutada kahte erinevat Pyhton keele põlvkonda, sõltuvalt kasutusalast võib see olla oluline, kumba konkreetsel juhul eelistada

  • 2.x - pikka aega kasutuses olnud versioon, suhteliselt palju tarkvara töötab sellega
  • 3.x - uuem versioon, nt teksti vs binari failide käsitluse osa on oluliselt muutunud

Stringioperatsioonid

for rida in open ('urlid'):
  rida = rida.rstrip()
  parts = rida.split(' ')
  parts = tuple(parts)
  print ('Protokoll: %s, teenuse hostname: %s' % parts)

kus

  • for tsükkel loeb rida haaval sisu
  • rida.rstrip() eemaldab rea lõpust reavahetuse märgi
  • rida.split(' ') moodustab stringist tühiku kohtadelt listi
  • tuple(parts) teisendab listi tupleks
  • print esitab tuple parts sisu kasutades formateeringut

Failioperatsioonid

Tekstifailist lugemiseks sobib kasutada nt sellist järgnevust

for rida in open ('urlid.txt'):
  print rida.rstrip()

kus

  • rstrip() eemaldab rea lõpust reavahetuse märgi
  • lugemine toimub for tsükli abil rida haaval

Tekstifaili kirjutamiseks sobib kasutada nt sellist järgnevust

read=('loomaaed.tartu.ee', 'kuutorvaja.eenet.ee', 'www.eesti.ee')
myfile = open ('urlid','w')

for rida in read:
  myfile.write (rida + '\n')

myfile.close()

kus

  • read - on tuple element, mis on massiivi moodi konstruktsioon, kuid mille sisu ei saa peale moodustamist muuta
  • kirjutamine toimub for tsüki abil rida haaval

HTTP

Skript http päringu vastuse päise elemendi esitamiseks

import httplib
conn = httplib.HTTPConnection("www.python.org")
conn.request("GET", "/index.html")
r1 = conn.getresponse()
print r1.getheader('last-modified')

Lihtsa HTTP serveri, mis serveerib üle HTTP käesoleva kataloogi sisu, saab käivitada selliselt

 $ python -m SimpleHTTPServer 8080
 Serving HTTP on 0.0.0.0 port 8080 ...

SMTP

Skript saadab smtp serveri kaudu välja kirja

import smtplib

fromaddr = "From: Priit Kask <priit@loomaaed.tartu.ee>"
toaddrs  = "To: Mart Kask <mart@loomaaed.tartu.ee>"

msg = fromaddr + "\n" + toaddrs + "\nSubject: test" + "\nkirja sisu"

server = smtplib.SMTP('192.168.1.250')
server.set_debuglevel(1)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()

Massiiv, for ja try/except/else konstruktsioon

Skript

  • kirjeldab massiivi URLID
  • käib läbi massiivis URLID toodud hostide /index.html ressursid
  • kui ressursi poole ei õnnestu pöörduda püütakse see try/except poolt kinni
import httplib

URLID = ('www.python.org',
         'kuutorvaja.eenet.ee',
         'seda.pole')

for i in URLID:
  try:
    conn = httplib.HTTPConnection(i)
    conn.request("GET", "/index.html")
  except:
    print "ei saa avada http://" + i + "/index.html"
  else:
    r1 = conn.getresponse()
    print i + " " + r1.getheader('content-length')

Käivitamisel esitatakse nt selline väljund

$ python for.py
www.python.org 16961
kuutorvaja.eenet.ee 267
ei saa avada http://seda.pole/index.html

Unicode

Skript UTF-8 formaadis faili kirjutamiseks (sisuks on Ä ja à tähed)

file = open('utf8data.txt', 'w', encoding='utf-8')
size = file.write('\xc4\xc3\n')
file.close ()

PostgreSQL andmebaasi kasutamine

Psycopg http://initd.org/psycopg/ võimaldab Pythonist kasutada PostgreSQL andmebaasi. Tarkvara paigaldamiseks Debian operatsioonisüsteemis sobib öelda

# apt-get install python-psycopg2

Skript küsib andmebaasist public.kasutajad tabelist kahte väärtust

import psycopg2
conn = psycopg2.connect("dbname=baasinimi host=192.168.1.247 user=kasutajanimi password=kasutajaparool")
cur = conn.cursor()
cur.execute("SELECT nimi, vanus FROM kasutajad where nimi = 'Priit Kask';")
read = cur.fetchall()

for rida in read:
  print ('Nimi: %s, vanus: %s' % rida)

cur.close()
conn.close()

kus

  • cur.fetchall() tagastab vastused tupledena

DNS

Pyhtoni seest DNS kasutamiseks sobib kasutada dnspython http://www.dnspython.org/ tarkvara, paigaldamiseks Debian keskkonnas tuleb öelda

# apt-get install python-dnspython

Selline skript esitab tekstifailis toodud domeeninimedele vastavate A kirjete ip aadressid

import dns.resolver

for rida in open ('hostid'):
  answers = dns.resolver.query(rida.rstrip(), 'A')
  for rdata in answers:
    print rida.rstrip() + " " + str(rdata)

Kasulikud lisamaterjalid