string methods etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
string methods etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

24 Nisan 2009 Cuma

Python’da Karakter Dizisi İşlemleri

(http://www.gokmengorgen.net adresinden alıntıdır.)

Geçenlerde bir arkadaşım, Python 3′te gettext modülünün nasıl kullanılacağını sormuştu, ben de henüz 3.* sürümünü denemediğim için bir cevap verememiştim. Hala da verebilecek aşamada değilim; ama bu konu üzerinde biraz araştırma yaparken, ilginç bir internet sayfasıyla[1] karşılaştım. Aşağıda paylaşacağım kodların ve bilgilerin Python 2.* serisinde çalışmaması söz konusu olabilir.

Python’da karakter dizilerini iki biçimde çağırabiliyoruz:

  • Karakter dizileri için % işleyicisi[2].

  • string.Template modülü[3]



% işleyicisiyle kullanım örneği, Python belgelerinde verilmiş:


>>> print('%(language)s has %(#)03d quot types.' % {'language': "Python", "#": 2})
#Python has 002 quot types.


Bu kodda değişkenler bir sözlük içinde eşleştirilmekte ve print çıktısında tanımlanmış değerleriyle ekrana yazılmaktadır. Bunun aynısı şu şekilde de yapabilirdik:


>>> print('%s has %03d quot types.' % ("Python", 2))
#Python has 002 quot types.


Birincisine göre daha basit olsa da, birinci kodda şöyle bir avantaj söz konusudur:

>>> print('The %(first)s variable, and the %(second)s variable.' % {'second': "New", 'first': "Old"})
#The Old variable, and the New variable.


Bu şekilde kullandığımız zaman, ikinci işleyiciyi ilk olarak tanımlayıp, ikinci işleyiciyi ise sonra tanımlayabilme fırsatımız olabiliyor. Nerelerde kullanılabileceği ayrı bir merak konusu. Bu merakı gidermeden önce bir de şu şekilde kullanıma bir bakalım:


>>> print('The {1} variable, and the {0} variable.'.format("New", "Old"))
#The Old variable, and the New variable.


İlginç, değil mi? Aslında bu kadar çeşitlilik olması garibime gidiyor; ama bu son yöntemin yüksek seviye programlama diline daha yakın bir tarz olduğunu düşünmeden edemiyorum. Yanılmıyorsam bu tip kullanım, C# ve Java’da da var. Şimdi son olarak aşağıdaki kodu inceleyelim:


import sys

class Main:
def __init__(self):
print("Python version is, {0}.".format(sys.version[:5])) # print'lerin yazimina dikkat..

digits_list = self.digits()

print("{1} is bigger than {0} as digit.".format(digits_list[0], digits_list[1]))

def digits(self):
try:
first_digit = int(input("Please write a digit: ")) # raw_input yerine input kullaniliyor.
second_digit = int(input("And second digit: "))

except ValueError:
print("\nSorry, you must enter a digit.")
exit()

return self.sort(first_digit, second_digit)

def sort(self, x, y):
return sorted([x,y])

if __name__ == "__main__":
Main()


Kodun yaptığı şey basit: Sizden iki sayı girmeniz isteniyor ve sayıları, büyüklüklerine göre {0} ve {1} ile eşleştirip, “X, Y’den sayıca büyüktür.” gibisinden bir cümle döndürüyor. Kod basit olduğu için bu tip karakter dizisi işleyicilerin faydası pek belli olmuyor; ama mutlaka bir yerde faydası vardır =). Son kodun çıktısı şu şekilde:


[gkmngrgn@gacer ~]$ python3 rank.py
Python version is, 3.0.1.
Please write a digit: 3
And second digit: 1
3 is bigger than 1 as digit.
[gkmngrgn@gacer ~]$


[1]: http://www.python.org/dev/peps/pep-3101/
[2]: http://docs.python.org/library/stdtypes.html#string-formatting-operations
[3]: http://docs.python.org/library/string.html#string.Template

11 Eylül 2008 Perşembe

String Methods

Not:[] içerisinde verilen parametreler isteğe bağlı olduğunu gösterir. Yani o parametreleri girmesek de fonksiyonumuz çalışır.

capitalize()
Bu fonksiyon stringimizin ilk harfini büyültmeye yarar.

In [3]: isim="deniz"
In [4]: isim.capitalize()
Out[4]: 'Deniz'


center()
Kullanımı center(genislik[doldurulacak karakter]) şeklindedir. Stringimizi belirttiğimiz genişlikte ortalar.

In [46]: isim="Deniz"
In [47]: isim.center(5)
Out[47]: 'Deniz'

Sanki hiç bir şey olmamışa benziyor ???
Birde sıradaki örneğimize bakalım.

In [48]: isim.center(10)
Out[48]: ' Deniz '

İlk örnekte zaten Deniz 5 karakterden oluştuğu için bize bir değişiklik yansımadı. Genişlik değerini belirtirken stringin uzunluğunuda dikkate almanızda fayda var.

Burda da isteğe bağlı parametre ile kullanalım. Kullanmadığımız taktirde ortalamak için boşluk karakteri kullanılıyor.

In [49]: isim.center(10,"-")
Out[49]: '--Deniz---'

count(karakter,[başlangıç[,bitiş])
Karakter veya karaterler ile aradığımız karakterden stringimiz içinde kaç adet olduğumu öğrenmeye yarar.

In [53]: isim2="Şemsi paşa pasajında bir şemsiyeci"
In [54]: isim2.count("paşa") #Pasajda kaç paşa olduğunu saydırıyoruz :)
Out[54]: 1
In [55]: isim2.count("i")
Out[55]: 4

In [61]: isim2.count("i",20,35) #20. karakterden 35. karaktere kadar kaç adet i harfi olduğunu sayıyor.
Out[61]: 2


endswith(karakter[baslangic[,bitis]])
Stringin karakter(ler) ile belirttiğimiz değerle bitip bitmediğini kontrol eder.

In [67]: isim2.endswith("yeci")
Out[67]: True
In [68]: isim2.endswith("yei")
Out[68]: False

Python 2.5 ile birlikte karakter yerine tüpte kullanabiliriz.

In [86]: import string
In [87]: cumle="Bu cumle noktalama isaretiyle mi biticek ?"
In [88]: noktalama=tuple(string.punctuation)
In [89]: cumle.endswith(noktalama)
Out[89]: True

Tüpler ile çalışma mantığı String tüpün içerisinde bulunan değerlerden herhangi biriyle mi bitiyor şeklindedir.

find(karakter[bas[,bitis]])
Stringimizin içinde karakterin olup olmadığını kontrol eder. Eğer var ise ilk bulduğunun indeksini döndürür. Yoksa -1.

In [115]: cumle="cumle icinde karakter ariyoruz"
In [116]: cumle.find("i")
Out[116]: 6
In [117]: cumle.find("kara")
Out[117]: 13
In [118]: cumle.find("p")
Out[118]: -1

islower(),isupper()
String içerisindeki tüm harflerin büyük ya da küçük olduğunu kontrol eder. Eğer bir tane bile küçük harf varsa False değeri döndürür.

In [124]: cumle
Out[124]: 'cumle icinde karakter ariyoruz'
In [125]: cumle.islower()
Out[125]: True
In [126]: cumle=cumle + "Buyuk harf ekledim bir tane"
In [127]: cumle
Out[127]: 'cumle icinde karakter ariyoruzBuyuk harf ekledim bir tane'
In [128]: cumle.islower()
Out[128]: False

isdigit()
Karakterlerin sayisal olup olmadığını kontrol eder. Birisi bile sayisal değilse False değeri döndürür.

In [130]: cumle = "1453 4151 15151251 1"
In [131]: cumle.isdigit()
Out[131]: False
In [132]: cumle = "14534151151512511"
In [133]: cumle.isdigit()
Out[133]: True

join(seri)
Biraz yaratıcılıkla beraber çok fazla işinize yarayacak bir fonksiyon.
Anlamak için örnekleri inceleyip kendinizde bir kaç deneme yapınız.

In [170]: c="Python ogreniyorum"
In [171]: d=c.join("''")
In [172]: print d
'Python ogreniyorum'

Yukarıda ki örnekteki gibi kullanım pek fazla olmamaktadır. Fakat sıradaki örnek çok işinize yarayabilir.

In [183]: isimler
Out[183]: ['deniz', 'gokmen', 'mirat', 'huseyin']
In [184]: " ".join(isimler)
Out[184]: 'deniz gokmen mirat huseyin'

In [185]: ";".join(isimler)
Out[185]: 'deniz;gokmen;mirat;huseyin'
In [186]: "-".join(isimler)
Out[186]: 'deniz-gokmen-mirat-huseyin'


lower(),upper()
Stringin içindeki tüm karakterleri büyültmeye ve küçültmeye yarar.

In [191]: cumle="BUYUK HarFLerDEN OluSaN Bir cUmlE"
In [192]: cumle.lower()
Out[192]: 'buyuk harflerden olusan bir cumle'
In [193]: cumle.upper()
Out[193]: 'BUYUK HARFLERDEN OLUSAN BIR CUMLE'


strip(),lstrip(),rstript()
strip() fonksiyonu string içerisinde sağdan ve soldan istediğimiz karakterleri çıkartmaya yarar. Eğer parantez içerisinde bir değer belirtilmemişse boşlukları çıkartır. Aşağıda ki örnekleri iyice inceleyip ne olup bittiğini anlamaya çalışın.

In [202]: 'www.python.com'.strip('cmow')
Out[202]: '.python.'
In [203]: 'www.python.com'.strip('cmow.')
Out[203]: 'python'

In [204]: 'www.python.com'.strip('cmow.n')
Out[204]: 'pyth' #"n" karakterini ekleyince "o" nunda gittiğine dikkat ediniz.

In [205]: 'www.python.com'.strip('cmowp.n')
Out[205]: 'yth'

In [206]: 'www.python.com'.strip('cmop.n')
Out[206]: 'www.pyth' #"w" silinince baştan bir eksiltme yapmadığına dikkat ediniz.


Şimdide lstrip ve rstrip kullanımına 2 örnek

In [208]: 'www.python.com'.lstrip('.w')
Out[208]: 'python.com'

In [209]: 'www.python.com'.rstrip('.omc')
Out[209]: 'www.python'

replace(eski,yeni[,sira])
String içerisindeki değeri değiştirmek için kullanırız. eski ile verilen karakterleri yeni ile değiştirir.

In [210]: a='www.python.com'

In [211]: a.replace('w','v')
Out[211]: 'vvv.python.com'

In [212]: a.replace('w','v',2)
Out[212]: 'vvw.python.com'

In [213]: a.replace('y','i')
Out[213]: 'www.pithon.com'

In [215]: a.replace('yth','it')
Out[215]: 'www.piton.com'


Sık kullanılan bazı string methodlarını elimden geldiğince anlatmaya çalıştım. Methodlar hakkında ayrıntılı bilgi için "print string.method.__doc__" (örn: print a.replace.__doc__) burada anlatılmayan diğer string methodları için burayı ziyaret edebilirsiniz.