A Python programozási nyelv

String kezelés

A String, mint immutable sorozat típus

A String a Python típusrendszerében a Sorozat (Sequence) típusai közé tartozik, és fajtáját tekintve immutábilis (immutable). String literálokat a " vagy ' idézőjelek közé teszünk: "hello", 'hello' (az idézőjel választása tetszőleges). Literálokat írhatunk még tripla idézőjelek (""" vagy ''') közé, ekkor a literál tartalmazhat újsor karaktereket és idézőjeleket is.

>>> str = """
>>> Ez egy sor
>>> Ez még egy.
>>> Itt a "harmadik"
>>> """
>>> print str
Ez egy sor
Ez még egy.
Itt a "harmadik"
>>>

A \ karaktert használjuk, ha escape-elni akarunk olyan karaktereket, melyeknek egyébként speciális jelentése van, mint például az újsor karakter, a \ karakter maga, vagy az idézőjelek.
A String literálokat prefixelhetjük egy 'r' vagy 'R' karakterrel: r"Szia\n". Az ilyen stringeket nevezzük raw stringeknek, ezeknél a C-ből ismert escape sequence-ket nem veszi figylembe az interpreter. Ilyen escape sequence-k pl.:

Prefixelhetjük továbbá a String literálokat 'u' vagy 'U' karakterrel, az ilyen string-ek Unicode kódolású stringek. Ha egy literál nincs prefixelve, akkor a kódolása az alapértelmezett ASCII.
A forráskódban megengedett több egymás utáni string literál, whitespace-el elválasztva (pl.: "hello" 'world'). Ez ekvivalens a két literál konkatenációjával ("helloworld"). Fontos tudni, hogy az e fajta összefűzés fordítási időben történik. Futási időben ez a konkatenáció nem működik, helyette a + operátor használandó.

Mivel a Stringek immutábilis sorozatok, ezért az ezekre értelmezett műveletek természetesen használhatók a karakterláncokra is.

x in str Igaz, ha x strning része az str string-nek (substring)
s + t s és t stringek konkatenációja
s * n, n * s s replikálása n-szer, egymáshoz konkatenálva
s[i] s string i-edik karaktere (0 az első)
s[i:j] s string i-től j-ig tartó szelete
s[i:j:k] s i-től j-ig tartó szelete, k lépésközzel
len(s) s hossza
min(s) s-ben a legkisebb ASCII kódú karakter
max(s) s-ben a legnagyobb ASCII kódú karakter

String metódusok

Az alábbi metódusok alkalmazhatók String objektumokra. További, a reguláris kifejezésekhez kapcsolódó string műveletekről találhat leírást a Reguláris kifejezések részben.

str.capitalize()
Visszatér str másolatával úgy, hogy az első karaktert nagybetűssé alakítja
str.center(width[, fillchar])
Visszatér str középre igazított, width hosszúságú másolatával. A kitöltő karaktert az opcionális fillchar határozza meg (alapértelmezettként szóköz).
str.count(sub[start[, end]])
Visszatér sub előfordulásainak számával str-ben, a start-tól az end pozícióig.
str.decode([encoding[, errors]])
A megadott encoding objektum által kódolja a string-et
str.endswith(suffix[, start[, end]])
Igazzal tér vissza, ha str suffix stringre végződik. A suffix lehet egy stringehet tartalmazó tuple is, ebben az esteben igazat ad a metódus, ha valamelyik eleme szuffixe az str stringnek. A tesztelés az opcionális start paraméternél kezdődik és az opcionális end paramétrenél ér véget.
str.expandtabs([tabsize])
Visszatér str egy olyan másolatával, ahol minden tab karakter egy vagy több szóköz karakterre van lecserélve. A szóközök számát az opcionális tabsize paraméter határozza meg (alapértelmezettként 8)
str.find(sub[, start[, end]])
Visszaadja azt a legkisebb indexet, ahonnan kezdve sub előfordul az str stringben. -1-gyel tér vissza, ha sub nem található str-ben.
str.format(*args, **kwargs)
str-en végrehajt egy string formázási műveletet és visszaadja a formázott szöveget. A formázandó szöveg literálokból állhat, illetve {}-vel határolt kicserélendő mezőkből. Minden egyes kicserélendő mező vagy egy pozicionális argumentum indexét, vagy egy kulcsszavas argumentum nevét tartalmazza.
>>> "The sum of 1 + 2 is {0}".format(1+2)
'The sum of 1 + 2 is 3'
A string formázásról bővebben a String formázás résznél olvashat.
str.index(sub[, start[, end]])
Ugyanaz, mint a find(), de ValueError kivételt dob ha a string nem volt megtalálható.
str.isalnum()
Igazzal tér vissza, ha a stringben minden karakter alfanumerikus, és legalább egy karakter hosszú.
str.isalpha()
Igazzal tér vissza, ha a stringben minden karakter alfabetikus, és legalább egy hosszú.
str.isspace()
Igazzal tér vissza, ha a strig csak whitespace karaktereket tartalmaz és legalább egyet.
str.istitle()
Igazzal tér vissza, ha a string címszerű, azaz minden szava nagybetűvel kezdődik, és legalább egy karaktert tartalmaz.
str.isupper()
Igazzal tér vissza, ha a string minden karaktere nagybetűs és legalább egy hosszú.
str.join(iterable)
Visszatér egy olyan stringgel, amely az iterable objektumból való stringek konkatenációja. A stringek közötti elválasztó az str string.
>>> ", ".join(["alma", "korte", "dio"])
"alma, korte, dio"
str.ljust(width[, fillchar])
Visszatér azzal a width hosszú stringgel, amelyben str balra van igazítva. Az opcionális fillchar paraméter határozza meg a kitöltő karaktert.
str.lower()
Visszatér azzal a stringgel, amelyben str minden karaktere kisbetűs.
str.lstrip([chars])
Visszatér str azon másolatával, ahol a string eleji karakterek el vannak távolítva. A chars paraméter egy string, amely az eltávolítandó karaktereket tartalmazza. Ha hiányzik, akkor a metódus csak a whitespace karaktereket távolítja el.
str.partition(sep)
Patricionálja str stringet az első sep elválasztónál, és visszaad egy 3 elemű tuple-t, ahol az első elem a sep előtti, a második maga a sep, a harmadik pedig a sep utáni rész. Ha sep nem része str-nek, akkor a 3 elemű tuple első eleme maga a teljes str lesz, a további két elem pedig üres string.
str.replace(old, new[, count])
Visszatér str azon másolatával, ahol old összes előfordulása le van cserélve new-re. Az opcionális count paraméter azt határozza meg, hogy legfeljebb hány előfordulás legyen lecserélve.
str.rfind(sub[, start[, end]])
Visszaadja azt a legnagyobb indexet, amelytől kezdődően sub megtalálható az str stringben. Az opcionális start és end paraméterek segítségével str adott szeletében kereshetünk.
str.rindex(sub[, start[, end]])
Ugyanaz, mint a rfind(), de ValueError kivételt dob, ha a string nem volt megtalálható.
str.rjust(width[, fillchar])
Visszaadja az adott stringet jobbra igaítva egy width hosszúságú stringben. Az opcionális fillchar paraméter határozza meg a kitöltő karaktert (alapértelmezett: szóköz).
str.rpartition(sep)
Patricionálja str stringet az utolsó sep elválasztónál, és visszaad egy 3 elemű tuple-t, ahol az első elem a sep előtti, a második maga a sep, a harmadik pedig a sep utáni rész. Ha sep nem része str-nek, akkor a 3 elemű tuple első eleme maga a teljes str lesz, a további két elem pedig üres string.
str.rsplit([sep[, maxsplit]])
Visszatér az adott string szavait tartalmazó listával, ahol sep a szavakat elválasztó jel(sorozat). Ha a maxsplit paraméter meg van adva, akkor a metódus jobbról kezdve legfeljebb maxsplit szeletelést végez.
str.rstrip([chars])
Visszatér str azon másolatával, ahol a string végi karakterek el vannak távolítva. A chars paraméter egy string, amely az eltávolítandó karaktereket tartalmazza. Ha hiányzik, akkor a metódus csak a whitespace karaktereket távolítja el.
str.split([sep[, maxsplit]])
Visszatér az adott string szavait tartalmazó listával, ahol sep a szavakat elválasztó jel(sorozat). Ha a maxsplit paraméter meg van adva, akkor a metódus balról kezdve legfeljebb maxsplit szeletelést végez.
str.splitlines([keepends])
Feldarabolja az str stringet a sor határoknál, és visszatér a sorokat tartalmazó listával. Az egyes sorok a sorvége jeleket nem tartalmazzák, hacsak a keepends opcionális paraméter nem True igazságértékű.
str.startswith(prefix[, start[, end]])
Igazzal tér vissza, ha str a prefix string-gel kezdődik, ellenkező eseten hamissal. Ha az opcionális start ill. end paraméter adott, akkor az összehasonlítás a start indexnél kezdődik, illetve az end indexnél fejeződik be.
str.strip([chars])
Visszatér str azon másolatával, ahol a string eleji és végi karakterek el vannak távolítva. A chars paraméter egy string, amely az eltávolítandó karaktereket tartalmazza. Ha hiányzik, akkor a metódus csak a whitespace karaktereket távolítja el.
str.swapcase()
Visszaadja azt a stringet, amelyben str kisbetűi nagybetűssé vannak konvertálva és fordítva.
str.title()
Visszaadja azt a stringet, amelyben str minden szava nagybetűvel kezdődik és a szavak további karaktere kisbetűs.
str.translate(table[, deletechars])
Visszaadja str-nek azt a másolatát, amelyben minden karakter ki van törölve, amely szerepel a deletechars stringben, a maradék karakterek pedig le vannak képezve az adott konverziós tábla (table) által. A table kötelezően egy 256 hosszúságú string.
str.upper()
Visszadja str azon másolatát, amelyben a karakterek csupa nagybetűsek.
str.zfill(width)
Visszaadja az str numerikus stringnek azon másolatát, amely balról fel lett töltve annyi 0-val, hogy az új string width hosszúságú legyen. A metódus a negatív numerikus strinkeket is jól kezeli, továbbá ha width kisebb, mint az str hossza, akkor visszaadja az eredeti stringet.

String formázás

A String és Unicode objecteknek van egy egyedi, beépített operátora: a % operátor. Ez az operátor az ún. string formázó operátor. A Python 2.6 vezeti be az str.format() metódust, amely ugyancsak string formázást teszt lehetővé, a % operátorral azonos módon. A Python 3.0-tól kezdve a % operátor elavultnak számít, helyette az str.format() használata javasolt.

Az operátor működése megegyezik a C-ből ismert sprintf() függvénnyel: a format % értékek utasítás az értékeket kiértékei a format operandus konverziós specifikációinak (mezőinek) megfelelően, majd behelyettesíti azokat. Ha a format egyetlen egy argumentumot kíván, akkor az értékek lehet egy nem-tuple objektum. Több argumentum esetén viszont kötelezően tuple az értékek operandus.

>>> "The counter named %s is %02d" % ("clock", 3+2)
"The counter named clock is 05"
>>> "the counter named {0} is {1:02d}".format("clock", 3+2)
'the counter named clock is 05'

A konverziós mező kettő, vagy több karakterből áll, és az alábbi elemekből állhat (ebben a sorrendben):

  1. A '%' karakter, ami a specifikáció kezdetét jelöli. format() esetén ez a ':' karakter.
  2. Egy opcionális mapping key, ami egy tetszőleges karaktersorozat zárójelben. Pl (someone)
  3. Konverziós flag-ek (opcionális), amik a konverzió típusát és végeredményét befolyásolják.
  4. Minimális mező szélesség (opcionális). Ha a '*' karakterként van megadva, akkor az aktuális szélességet az értékek tuple köveztekő eleme határozza meg.
  5. Pontosság (opcionális), amit egy '.' és egy azt követő szám határoz meg. Ha a '*' karakterként van megadva, akkor az aktuális pontosságot az értékek tuple köveztekő eleme határozza meg.
  6. Hossz módosító (opcionális).
  7. Konverzió típusa.
Ha a % operátor jobb argumentuma egy dictionary (vagy egyéb mapping típus), akkor a konverziós mezőknek kötelezően tartalmazniuk kell a zárójelezett mapping key-t. Pl.:
>>> print '%(language)s has %(#)03d quote types.' % \
... {'language': "Python", "#": 2}
Python has 002 quote types.
Ebben az esetben a '*' karakter nem szerepelhet a specifikációkban, hiszen annak feldolgozása szekvenciális argumentumot kíván.

A konverziós flagek:
Flag Jelentés
'#' A konverzió az adott konverziós típus alternatív formáját fogja használni. Lásd lejjebb.
'0' A konverzió 0-val fogja balról kiegészíteni a numerikus stringet.
'-' A konvertált érték balra igazított lesz. (Felülírja a '0' flag-et, ha az is adott).
' ' (szóköz) Pozitív numerikus string elé a konverzió betesz egy szóközt (előjeles konverziónál használatos).
'+' Az előjel mindig megjelenik a konvertált stringben (felülírja a szóköz flag-et).

A hossz módosító (h, l, L) jelen lehet, de a Python esteében ez figyelmen kívül van hagyva, tehát pl. a '%d' ugyanaz, mint a '%ld'. E módosító kizárólag a C-vel való kompatibilitás céljából került bele a Pythonba.

A konverzió típusok a következők:

Flag Jelentés
'd' Előjeles integer (decimális).
'i' Előjeles integer (decimális).
'o' Előjeles oktális érték.
'u' Elavult típus, megegyezik 'd'-vel.
'x' Előjeles hexadecimális (kisbetűs).
'X' Előjeles hexadecimális (nagybetűs).
'e' Lebegőpontos szám exponenciális alakban (kisbetűs).
'E' Lebegőpontos szám exponenciális alakban (nagybetűs).
'f' Lebegőpontos szám tizedestört alakban.
'F' Lebegőpontos szám tizedestört alakban.
'g', 'G' Lebegőpontos szám. Ha az exponens kisebb, mint -4 vagy nemkisebb, mint a pontosság, akkor exponenciális alakban van, egyébként pedig tizedestört alakban.
'c' Egy karakter. E típus paraméterként elfogad integer, illetve egyhosszú stringet is.
'r' String. Bármely típusú Python objektumot elfogad, és a repr() függvény eredményét írja ki.
's' String. Bármely típusú Python objektumot elfogad, és az str() függvény eredményét írja ki.
'%' Nincs argumentum-konverzió, hanem egy '%' karaktert ír ki.

Az oktális érték alternatív formája 0-kal van kitöltve a bal oldalon, ha a szám első számjegye nem nulla.
A hexadecimális érték alternatív formái: x32fd helyett 0x32fd és X32fd helyett 0X32fd.
A lebegőpontos számok alternatív formája mindig tartalmaz tizedespontot, még akokr is ha nem követi számjegy azt. Az alapértelmezett pontosság: 6.
Stringeknél a pontosság azt határozza meg, hogy maximum milyen hosszú lehet a string.