Python kezdőknek kurzus 9. lecke

A Ubuwiki wikiből

Néhány további extra

Eredeti lecke: http://www.shallowsky.com/python/lesson9.txt

Ez a lecke néhány hasznos sztring műveletet tartalmaz, plusz két témát, amiről sokan szeretnének többet tudni: a webfejlesztést és a GUI (grafikus) eszközöket.

Egyéb sztring műveletek

Használtuk már a split() és strip() parancsokat a sztringeknél, de ezeken kívül van még pár hasznos függvény, amiket érdemes ismerni.

Először is: sztringek összefűzése. Elég gyakran előfordulhat, hogy van egy listánk, mint például [‘a’, ‘b’, ‘c’, ‘d’] és szeretnénk összefűzni őket úgy hogy szóköz vagy vessző legyen köztük, például valami ilyesmit szeretnénk végeredménynek: "a, b, c, d"

Nyilvánvalóan használhatunk ciklust:

lista = [ 'a', 'b', 'c', 'd' ] 
s = ""
for x in lista :
    s = s + "," + x

Hoppá! A fenti esetén az s értéke ",a, b, c, d" lesz, egy extra vesszővel. Emiatt muszáj a fenti ciklust módosítani úgy, hogy az első vagy utolsó elemet különbözőképp kezeljük, mint a többit. Szerencsére a Pythonnak van egy rövidebb módja, hogy megoldjuk a feladatot:

','.join(lista)
' '.join(lista)

A szintaxis furcsa lehet: készítünk egy sztring objektumot a semmiből, hogy összefűzzük a lista elemeit, és meghívjuk a join() függvényt, a lista paraméterrel. Időbe telhet hozzászokni ehhez az írásmódhoz. Viszont amint sikerül ezen túllépni, biztosan nagyon hasznosnak fogod találni ezt az eszközt!


Kereshetünk réssztringeket, például a

if "://" in "http://example.com" :

vagy meghatározhatjuk pontosan hol helyezkednek el

s.find('pat')   # a pat első előfordulása az s-ben
s.find('pat', start, end)

vagy lecserélhetjük a sztring egy részét:

s.replace('X', 'Y')

Van emellett még pár hasznos függvény, például:

s.startswith("http://") # mivel kezdődik a sztring
s.endswith(".html") # sztringvégződés eldöntésére

illetve python2-ben:

s.lower(), s.upper() # kis/nagybetűssé alakítás

… és python3-ban:

s.lower(), s.upper()

További információ: http://docs.python.org/library/stdtypes.html#string-methods

Webfejlesztés

Ha CGI szkripteket szeretnénk írni Pythonban, használjuk a cgi modult, ami segít a beküldött formok által küldött értékeket lekérdezni

Python 2.x Python 3.x
import cgi

print "Content-type: text/html\n"

fields = cgi.FieldStorage()
if "nev" not in fields or "cim" not in fields:
     print "<H1>Hiba</H1>"
     print "Kerem toltse ki a nevet es a cimet."
else:
     print "<p>Nev:", fields["nev"].value
     print "<p>Cim:", fields["cim"].value
import cgi

print("Content-type: text/html\n")

fields = cgi.FieldStorage()
if "nev" not in fields or "cim" not in fields:
     print "<H1>Hiba</H1>"
     print "Kerem toltse ki a nevet es a cimet."
else:
    print("<p>Nev:", fields["nev"].value)
    print("<p>Cim:", fields["cim"].value)

Ha szeretnénk letölteni fájlokat a webről, érdemes az urllib2-t használni (valószínűleg volt urllib is, de senki sem kedvelhette). Az alapok elég egyszerűek:

Python 2.x Python 3.x
import urllib2
valasz = urllib2.urlopen("http://women.ubuntu.hu/")
if valasz.headers['content-type'].startswith("text"):
    html = valasz.read()
    print html
else :
    print "Nem szoveg!"
import urllib.request
valasz = urllib.request.urlopen("http://women.ubuntu.hu")
if valasz.headers['content-type'].startswith("text"):
   html = valasz.read()
   print(html)
else :
   print("Nem szoveg!")

Természetesen vannak más modulok is, amik például az RSS-sel, vagy JSON-nak, vagy adatbázis-kapcsolatokkal kapcsolatosak.


Python grafikus alkalmazások

Három eszköz közül választhatunk, ha grafikus ("ablakos”) Python programokat szeretnénk készíteni.


PyGTK

A legtöbb Linux disztribúcióban installálva van. Messze a legkifinomultabb és legdokumentáltabb a három opció közül. Sajnos viszont a Windowsra telepítése nem a legegyszerűbb, nem is beszélve a Mac-ről. Jómagam (Akkana) PyGTK-t használok a legtöbb GUI-s Python alkalmazásomnál.

Három cikket írtam a témáról (Akkana): http://www.linuxplanet.com/linuxplanet/tutorials/6750/1/ http://www.linuxplanet.com/linuxplanet/tutorials/6760/1/ http://www.linuxplanet.com/linuxplanet/tutorials/6771/1/

PyTk

Néhány Python programozó a PyTK-t natív Python GUI eszköznek tekinti. Szerencsére ez Windows alatt a Pythonnal együtt “jár”, tehát ha PyTk-t használjuk, akkor biztosak lehetünk abban, hogy Windows-ban is használható lesz az alkalmazásunk. Mindemellett a legtöbb Linux disztribúcióban alapértelmezetten nem telepített, úgyhogy a Linuxot használók csak akkor tudják használni az ebben írt programunkat, ha maguk is telepítik.

Jómagam kicsit csiszolatlannak tartom ezt az eszközkészletet, és nem is túl jól dokumentált. Nem írtam még PyTk specifikus cikket, de van egy cikkem, hogyan lehet PyTk segítségével Twitter klienst írni: http://www.linuxplanet.com/linuxplanet/tutorials/6792/1/ (Megjegyzés: Twitterben megváltozott az autentikáció azóta, mióta a tutorial készült, úgyhogy a fenti példa már nem fog működni, viszont a benne rejlő ötleteknek hasznát vehetjük.)

PyQt

Mivel Qt, jól néz ki és kifinomult. De sajnos nem tesztelték annyit, mint az előző kettőt: elég sok probléma van azzal, hogy működésre bírjuk. Akkor ajánlom, ha KDE-be szeretnénk a programot integrálni, vagy már eleve Qt rajongók vagyunk, különben nem biztos, hogy érdemes nekifogni. Egy kezdő cikkem a témában: http://www.linuxplanet.com/linuxplanet/tutorials/6967/1/

Valaki érdeklődött a GIMP-Python témában, erről is született már pár cikk: http://www.linuxplanet.com/linuxplanet/tutorials/6720/1/ http://www.linuxplanet.com/linuxplanet/tutorials/6734/1/ … illetve egyik könyvemben is lehet olvasni a témában: "Beginning GIMP: From Novice to Professional": http://gimpbook.com/

Web és GUI kombinálása

Ha már tudunk letölteni fájlokat és grafikus ablakokat kezelni, felmerülhet a kérdés: hogy működik a megjelenítés?

Korábban már említettük, hogy számos hasznos Python modul létezik, melyekkel tulajdonképpen bármit el tudunk készíteni. A Pythonnak a WebKithez is köze van. A WebKit böngészőmotort használja a Konqueror illetve Chrome böngésző is. Ez azt jelenti, hogy nagyon egyszerű saját böngészőt írnunk!

Visszakanyarodva a témához: én a pywebkitgtk-t használom, ha egyszerűen csak szeretnék egy bemutató eszközt készíteni, olyat, amilyet használhatok arra, hogy a diáimat megjelenítsem egy konferencián (ahelyett hogy egy teljes nehézsúlyú böngészőt használnék, mint amilyen a Firefox is). Egy py-webkit-gtk példakóddal kezdtem és ezen végeztem változtatásokat. 30 sor kódból (a kommenteket is beleértve) megvolt a prezentáció nézegetőm.

http://shallowsky.com/blog/programming/webkit-presenter.html

További leckék

Személyes eszközök