Lesson 9: More extras Today's lesson combines some more helpful string operations plus two topics people said they wanted to hear about: web development and GUI toolkits. ================ More string ops ======================= You've used split() and strip() on strings, but there are a few other string functions you should know about. First: joining strings. It happens fairly often that you have a list like [ 'a', 'b', 'c', 'd' ] and you want to stick commas or spaces between them to get something like "a, b, c, d". How do you do that? The obvious thing to do is to loop over the list, something like: thelist = [ 'a', 'b', 'c', 'd' ] s = "" for x in thelist : s = s + "," + x Except, oops! That produces "a, b, c, d," -- an extra comma. So you have to do some heinous thing where you treat the first or last element in the list differently. But fortunately, Python has a shortcut way of doing that: ','.join(thelist) ' '.join(thelist) The syntax is weird: you're making a string object out of the thing you want to use to join everything, then calling that object's join() function. It takes a while to get used to seeing that. But if you can get past the wierd syntax, you'll find it super useful. You can search for substrings: if '://" in "http://example.com" : or you can find exactly where they are: s.find('pat') # find the first occurence of pat in s s.find('pat', start, end) or replace parts of a string: s.replace('X', 'Y') Some other useful string operations (self-explanatory): s.startswith("http://") s.endswith(".html") s.tolower(), s.toupper() And, of course, lots of other stuff too: http://docs.python.org/library/stdtypes.html#string-methods ================ Web development ======================= Someone asked about web development. I'm not going to go into a lot of detail on that, but here are a few tips to get you started. If you're writing CGI scripts in Python, you use cgi module, which makes it easy to get values submitted from forms. import cgi print "Content-type: text/html\n" fields = cgi.FieldStorage() if "name" not in fields or "addr" not in fields: print "

Error

" print "Please fill in your name and address." return print "

name:", fields["name"].value print "

addr:", fields["addr"].value If you want to download files from the web, use urllib2. (I guess there was a urllib and nobody liked it. Or something.) The basics are pretty easy: import urllib2 response = urllib2.urlopen("http://linuxchix.org/") if response.headers['content-type'].startswith("text") html = response.read() print html else : print "It's not text!" Of course, there are other modules for dealing with RSS, JSON, databases and most other things you'll need for web programming. ================ Python GUI Apps ======================= Several people asked about Python GUIs. I'm going to cop out a little here and point you to some articles I've already written -- partly because that way there's more space for examples and screenshots. You have three choices of toolkit for writing Python GUI apps: - PyGTK: This comes preinstalled on most Linux distros. It's by far the most polished and documented of the three options. However, it's a minor pain to install on Windows (you have to install 4 packages from two different places) and can be a major pain on Mac. I use PyGTK for most of my own Python GUI development, but I have to keep in mind that few non-Linux people will want to use it. I wrote three Linux Planet articles on PyGTK: 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: Some Python programmers consider this sort of a "native" GUI toolkit for Python, and it comes bundled with Python for Windows, so if you write in PyTk then Windows people will be able to use your app. However, many Linux distros don't install it by default, so Linux people won't be able to use your app without installing something; and I've found the toolkit a bit rough and not all that well documented. I don't have an article specifically on PyTk, but I do have an article about writing a Twitter client where the UI is in PyTk: http://www.linuxplanet.com/linuxplanet/tutorials/6792/1/ (Note: Twitter changed its authentication scheme since that was published, so it won't work as a general Twitter client any more, but you can use it for things like keyword searches.) - PyQt: Being Qt, things look pretty and polished. But the toolkit isn't nearly as well tested as the other two: I had a lot of trouble getting things working well. Use it if you need to integrate with KDE or if you're already a Qt fan, otherwise it may be more pain than it's worth. I have a beginner article on PyQt: http://www.linuxplanet.com/linuxplanet/tutorials/6967/1/ Someone also asked about GIMP-Python, and I have articles about that too: http://www.linuxplanet.com/linuxplanet/tutorials/6720/1/ http://www.linuxplanet.com/linuxplanet/tutorials/6734/1/ There's a bit more information in my book (shameless plug), "Beginning GIMP: From Novice to Professional": http://gimpbook.com/ ================ Combining web and GUI ================== If you can download files, and if you can bring up GUI windows, you might wonder -- what about displaying them? I mentioned early in the course that Python has an amazing number of modules to do practically anything you can think of. Well, it turns out there are Python bindings for WebKit, the browser used by Konqueror, Chrome and lots of others. Which means it's amazingly easy to write your own browser! A while back, I used pywebkitgtk to write a simple presentation tool, something I can use to display my slides at conferences instead of using a full heavyweight browser like Firefox. I started with some of the py-webkit-gtk sample code, and didn't have to make many changes at all, and in 30 lines of code (including comments) I had a presentation viewer. I blogged it: http://shallowsky.com/blog/programming/webkit-presenter.html =================== Homework ============================ I had so much fun reading the useful "solves real-world problems" programs from lesson 8 that I'm going to keep it general again, and say: Write either a web program (either CGI or client side) or a GUI program, or both, to do something you find useful and/or fun. Use docstrings in your functions. Or, if you aren't interested in web or GUI programming, just write any kind of fun or useful script!