Tractament de cadenes en Python
Escrit per Aaloy a 15 de April , 2007 a les 11:33 a.m.
El tractament de cadenes de Python és potser una d'aquelles coses que fan el llenguatge més potent. He fet feina amb altres llenguatges: C, C++, Forté, Pascal, Basic, ... i de lluny el tractament de cadenes de Python és el més clar, potent i a la vegada intuïtiu que m'he trobat, sols s'hi atraca un poc un llenguatge un tant esotèric anomenat icon al qual m'hi vaig aficionar ja fa molt de temps. Anem a veure un parell d'exemples:>>> a = "hola" >>> b = ' món' >>> print a+b hola mónCom podem veure no import si feim servir cometes dobles o simples, i la concatenació de cadenes és simplement una suma. Tot i això hem de saber que les cadenes són també objectes i un dir ens dirà el que hi podem fer
>>> dir(a) ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__str__','capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition','rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']Per exeple un help(a.zfill) ens dirà què fa aquesta funció
Help on built-in function zfill:zfill(...) S.zfill(width) -> string Pad a numeric string S with zeros on the left, to fill a field of the specified width. The string S is never truncated. (END)És a dir, afegeix zeros a l'esquerra fins a l'emplada que volguem:
>>> a.zfill(10)
'000000hola'
Juguem un poc més amb les cadenes, què us imaginau que passarà si multiplicam una cadena per un sencer?
>> a*2 'holahola'Bastant previsible, no? Python té aquestes coses, que pots preveure què passarà sense tenir-ne massa idea del llenguatge. Suposem ara que volem agafar trossos d'una cadena, python tracta les cadenes com a matrius de caràcters i per tant és possible fer coses com aquestes:
>>> test = "hola món què 'passa' per aquí" >>> print test[0] 'h' >>> print test[0:4] hola >>> print test[:4] hola >>> print test[9:] què 'passa' per aquí >>> print test[9:22] què 'passa' >>> print test[9:-9] què 'passa'Fixem-nos en el darrer exemple, hem fet servir valors negatius per a referir-nos al final de la cadena. També podem fer coeses com un recorregut pels caràcters de la cadena amb
>>> for char in test: ... if char == "'": ... print "cometa" ... cometa cometa
>>> [x for x in test if x > 'h'] ['o', 'l', 'm', 'xc3', 'xb3', 'n', 'q', 'u', 'xc3', 'xa8', 'p', 's', 's', 'p', 'r', 'q', 'u', 'xc3', 'xad']Però de llarg la meva preferida és la possibilitat de crear plantilles, a l'estil del printf de C o de les que darrerament ha incorporat Java 5, que ja era hora!
>>> missatge="hola %s, avui vindré a les %i"
>>> print missatge % ('Maria', 10)
hola Maria, avui vindré a les 10
O fins i tot fer servir diccionaris per això:
>>> missatge="hola %(nom)s, avui vindré a les %(hora)i"
>>> params = {'nom':'Catalina', 'hora':8}
>>> print missatge % params
hola Catalina, avui vindré a les 8
Me deix tota la part de funcions, expressions regulars i altres, això és sols per obrir boca, i potser ajudar a entendre a alguna gent del perquè el Python m'agrada tant.
Us deix algunes referències:
- http://docs.python.org/lib/string-methods.html
- http://www.network-theory.co.uk/docs/pytut/Strings.html
- http://docs.python.org/tut/node5.html#SECTION005120000000000000000
- http://www.developer.com/open/article.php/628641
- http://boodebr.org/main/python/all-about-python-and-unicode
Enllaços citats
- icon
- http://boodebr.org/main/python/all-about-python-and-unicode
- http://docs.python.org/lib/string-methods.html
- http://www.developer.com/open/article.php/628641
- http://docs.python.org/tut/node5.html#SECTION005120000000000000000
- http://www.network-theory.co.uk/docs/pytut/Strings.html
0 comentaris, 0 trackbacks (URL)