Python

Allikas: Kuutõrvaja
Redaktsioon seisuga 25. veebruar 2010, kell 00:55 kasutajalt Imre (arutelu | kaastöö) (Massiiv, for ja try/except/else konstruktsioon)

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

  • myfile = open ('urlid','w') - tekstifail urlid avatakse lugemiseks ja kirjutamiseks
  • 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()

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

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

except dns.resolver.NXDOMAIN:
  print ('Domeeninimel %s puudub A kirje' % rida.rstrip())

Help kasutamine

>>> help()

Welcome to Python 2.5!  This is the online help utility.

If this is your first time using Python, you should definitely check out
the tutorial on the Internet at http://www.python.org/doc/tut/.

Enter the name of any module, keyword, or topic to get help on writing
Python programs and using Python modules.  To quit this help utility and
return to the interpreter, just type "quit".

To get a list of available modules, keywords, or topics, type "modules",
"keywords", or "topics".  Each module also comes with a one-line summary
of what it does; to list the modules whose summaries contain a given word
such as "spam", type "modules spam".

help> 

Sisestades help> prompti järele huvipakkuva mooduli nime saab selle mooduli kohta teavet, nt

help> smtplib

Help on module smtplib:

NAME
    smtplib - SMTP/ESMTP client class.

FILE
    /usr/lib/python2.5/smtplib.py

MODULE DOCS
    http://www.python.org/doc/current/lib/module-smtplib.html

DESCRIPTION
    This should follow RFC 821 (SMTP), RFC 1869 (ESMTP), RFC 2554 (SMTP
    Authentication) and RFC 2487 (Secure SMTP over TLS).
...

Kasulikud lisamaterjalid