Python Fonksiyonlar( global, return, pass)
12 Temmuz 2013 Cuma
10 Temmuz 2013 Çarşamba
Eşleşme Nesnelerinin Metodları
Group() metodu
Bu metodu daha önce işlediğimiz düzenli ifadelerde kullanmıştık.
Bu bölümde başka bir özelliğine daha değineceğiz.Bu özellik ise
bir karakter dizisini gruplamamızı sağlaması.
kodlarını çalıştırdığımızda biz
çıktısını verecektir.Bu çıktı oluşturduğumuz grubumuzun tamamıdır.
Grubumuzun bölümlerine erişmek için ise
şeklinde yazdığımızda bu kodumuzun çıktısı 3. kelimemiz yani "dilinin" olacaktır.
Burada karıştırılmaması gerek konu indis numarasının 1'den başlaması.Daha önce gördüğümüz
listeler ile karıştırılmamalıdır.Örneğimizi biraz daha geliştirelim;
şeklinde düzenledikten sonra grubumuzun 4.bölümünü çağıralım
Kodumuzu çağırdıktan sonra biz verdiği çıktı "web çatısıdır" oldu.Yani grublamayı biz yönetbiliyoruz.
Groups() Metodu
Bu metodumuz bizim grupladığımız düzenli ifademizi demet haline çevirerek bize sunar.Bir önceki örnekle
devam edersek sadece çıktı alıcağımız yerdeki "group" koduna "s" ekliyeceğiz.
kodumuz bize şu şekilde bir çıktı verecektir:
buradaki 4 ifademizdeki "web" kelimesinden sonraki bölümdeler Türkçe karakter uyumsuzluğu olduğu için
çıkmaktadır.Aslında "\xe7at\xfds\xfdd\xfdr" ifadesinin anlamı "çatısıdır".
bir sonraki dersete görüşmek üzere
Bu metodu daha önce işlediğimiz düzenli ifadelerde kullanmıştık.
Bu bölümde başka bir özelliğine daha değineceğiz.Bu özellik ise
bir karakter dizisini gruplamamızı sağlaması.
improt re
gruplanacak_yazi="django python dilinin web çatısıdır."
gruplama=re.search("(django) (python) (dilinin) (web) (çatısıdır)")
print gruplama.group()
kodlarını çalıştırdığımızda biz
django python dilinin web çatısıdır.
çıktısını verecektir.Bu çıktı oluşturduğumuz grubumuzun tamamıdır.
Grubumuzun bölümlerine erişmek için ise
print gruplama.group(3)
şeklinde yazdığımızda bu kodumuzun çıktısı 3. kelimemiz yani "dilinin" olacaktır.
Burada karıştırılmaması gerek konu indis numarasının 1'den başlaması.Daha önce gördüğümüz
listeler ile karıştırılmamalıdır.Örneğimizi biraz daha geliştirelim;
gruplama=re.search("(django) (python) (dilinin) (web çatısıdır)",gruplanacak_yazi)
şeklinde düzenledikten sonra grubumuzun 4.bölümünü çağıralım
print gruplama.group(4)
Kodumuzu çağırdıktan sonra biz verdiği çıktı "web çatısıdır" oldu.Yani grublamayı biz yönetbiliyoruz.
Groups() Metodu
Bu metodumuz bizim grupladığımız düzenli ifademizi demet haline çevirerek bize sunar.Bir önceki örnekle
devam edersek sadece çıktı alıcağımız yerdeki "group" koduna "s" ekliyeceğiz.
.
.
.
print gruplama.groups()
kodumuz bize şu şekilde bir çıktı verecektir:
('django', 'python', 'dilinin', 'web \xe7at\xfds\xfdd\xfdr')
buradaki 4 ifademizdeki "web" kelimesinden sonraki bölümdeler Türkçe karakter uyumsuzluğu olduğu için
çıkmaktadır.Aslında "\xe7at\xfds\xfdd\xfdr" ifadesinin anlamı "çatısıdır".
bir sonraki dersete görüşmek üzere
21 Ocak 2013 Pazartesi
Düzenli İfadeler - 5
$ (Dolar)
Bir Önceki derste gördüğümüz ^(şapka) metakarakterinin ilk özelliğinin ters işlevine sahiptir.
Yani ^(şapka), karakter arama işlemini karakter topluluğunun başında yapıyordu, $(dolar)'da ise
aranacak karakter topluluğunun sonunda arama yapıyor.
Örnek verelim:
1.Örnek
>>> import re
>>> y=['deneme','söyleme','kaleme','makine','toplantı','kaşıntı','mırıntı']
>>> for i in y:
if re.search('me$',i):
print i
deneme
söyleme
kaleme
2.Örnek
>>> for i in y:
if re.search('e$',i):
print i
deneme
söyleme
kaleme
makine
3.Örnek
>>> for i in y:
if re.search('tı$',i):
print i
toplantı
kaşıntı
mırıntı
import re ile re kütüphanemizi eklemiş olduk.
1.örnekte sonu "me" ile biten kelimeleri buldurduk.
2.örnekte is sonu "e" ile biten kelimeleri buldurduk.
3.örnekte ise sonu "tı" ile biten kelimeleri buldurduk.
\ (Ters Bölme İşareti)
Bu metakarakter bildiğimiz kaçış dizisi ifadesidir.Bunu burada kullanmamızın sebebi ise özel karakterin
çıktısını alabilmek için.Örneğin az önceki konu olan $(dolar) işaretini el alalım.
>>>for i in liste:
if re.match('[0-9]+$',i):
print i
şeklinde bir kod yazarsek ekrana herhangi bir çıktı vermeyecek.Çünkü bizim sayı ile biten karakter dizisini
aradığımızı zannedecek, fakat bizim amacımız $(Dolar) fiyatlarını bulmak olduğu için yukarıdaki kodu
şöyle değiştiriyoruz:
>>> for i in liste:
if re.match('[0-9]+\$',i):
print i
10$
35$
Görüldüğü gibi istediğimiz sonuca ulaştık.
|(Dik Çizgi)
Bu metakarakterimizde birden falza düzenli ifadeyi eşleştirmemizde işimize yarıyor.Örneğin "de" ile başlayan ve "me" ile biten karakter dizilerini arayalım;
>>>y=['deneme','söyleme','kaleme','makine','toplantı','kaşıntı','mırıntı']
>>> for i in y:
if re.search('^de|me$',i):
print i
deneme
söyleme
kaleme
yada "ka" ile başlayan veya "ı" ile biten karakter dizilerini arayalım;
>>> for i in y:
if re.search('^ka|ı$',i):
print i
kaleme
toplantı
kaşıntı
mırıntı
ve son olarak bir örnek daha yaparak bu dersi sonlandıralım.
>>> import re
>>> import urllib
>>> url='http://www.pythondili.blogspot.com'
>>> f=urllib.urlopen(url) //Bu kodu yazdıktan sonra biraz beklemeniz lazım çünkü programın siteye ulaşması biraz zaman(10sn) alıyor.
>>> for i in f:
nesne=re.search('.+',i)
if nesne:
print nesne.group()
Çıktı olarak "Python İle İp Bulma" yazımda verdiğim linki buldu: Kaynak
Bu son örneğimizde pythondili.blogspot.com içindeki yazıların içinde verilen linkleri aratmaktayız.
Bu kodun url='http://www.pythondili.blogspot.com' kısmını url='http://pythondili.blogspot.com/2013/01/duzenli-ifadeler-4.html' olarak değiştirdiğimizde sadece o yazı içerisinde link var mı yok mu kontrol eder.
20 Ocak 2013 Pazar
Düzenli İfadeler - 4
{} (küme parantezi)
Bu metakarakter sayesinde, istediğimiz bir karakteri istediğimiz kadar yineletmemizi sağlıyor.
>>>import re
>>> liste=['st','sat','saat,','zaaat',]
>>>for i in liste:
if re.match("sa{2}t",i):
print i
saat
ilk örneğimizde 2 a harfi olan saat kelimesini buldurduk.
>>> for i in liste:
if re.match("za{3}t",i):
print i
zaaat
bu örneğimizdede 3 a harfi olan zaat kelimesini bulduk
Bu metakarakterimizin diğer bir özelliğide {0,2} şeklinde yazarak en az ve en çok ne kadar
tekrar etmesini belirtebiliriz
>>> for i in liste:
if re.match("sa{0,2}t",i):
print i
st
sat
saat
aynı sonucu şu kodlarlada alabiliriz;
>>> for i in liste:
if re.match("sa*t",i):
print i
st
sat
saat
sonuç aynı fakat burada herhangi bir sınır olmadığı için saaaaaat kelimesini listeye eklediğimizde
bu kelimeyide çıktı verecektir.Bir önceki dersten hatırlayalım.
^ (Şapka)
Bu metakarakterimizin 2 özelliği var.Bunlar ilki bir karakter dizisini en başındaki verileri sorgulamak:
>>> x=['VC10DD','FF33GG','WW44EE','QQ11QQ']
>>> for i in x:
ara=re.search("^[A-Z]+[0-9]",i)
if ara:
print ara.group()
VC1
FF3
WW4
QQ1
İkincisi ise " hariç " anlamında kullanımı:
>>>x.appen('4fbPY91')
>>> for i in x:
ara=re.match("[0-9A-Z][^a-z]+",i)
if ara:
print ara.group()
VC10DD
FF33GG
WW44EE
QQ11QQ
gördüğünüz gibi burada sonrada eklediğimiz "4fbPY91" elemanını çıktıda vermedi.Çünkü biz match
metoduyla aranacak kriterleri şöyle belirledik:
[0-9A-Z]=aranacak değerin en başında bir sayı veya büyük harf olmalı şartı
[^a-z]=belirlediğimiz sayı veya büyük har şartından sonra ^(şapka) metakarakterimizin ikinci özelliği
olan haric tutma özelliği ile küçük harf olmaması şartını sağlıyor.
+ =Bu karakterimizde ise yukarıdaki küçük harf olayının tekrar etmesi şartını sağlıyor yani
sayı veya büyük harften sonra ne kadar küçük harf gelirse gelsin yinede bu karakter topluluğunu almayacak.
Bu ^(şapka) metakarakterimizin dahil etmeme özelliğini şöylede kullanabiliriz:
>>> for i in x:
ara=re.search("[0-9A-Z][^a-z]+",i)
if ara:
print ara.group()
VC10DD
FF33GG
WW44EE
QQ11QQ
PY91
Görüldüğü gibi burada "4fbPY91" elemanımızın başında sayı olmasına rağmen sonraki karakterler küçük harf
olduğu için ilk üç karakteri çıkararak sonr 4 karakteri bize verdi
11 Eylül 2012 Salı
Düzenli İfadeler-3
+(Artı)
Bu karakterimiz * karakteriyle benzerdir.Fakat * karakteriyle kendisinden önceki 0 veya daha fazla
sayıda tekrar eden karakterleri buluyor.+ işareti ise kendisinden önce 1 veya daha fazla olan
karakterleri bulamamızı sağlıyor.
Örnek:
>>> liste=["batman", "catwoman", "zorman", "man"]
>>> for i in liste:
if re.match(".+man",i):
print i
batman
catwoman
zorman
Görüğümüz gibi burada "man" kelimesinin çıktısını vermedi.Bunun neden ".+man" yazmış olmamızdır.
Ama * karakteriyle kullanılan sonuçta ise;
>>> for i in liste:
if re.match(".*man",i):
print i
batman
catwoman
zorman
man
"man" kelimesini ekrana verdi.
Şimdi bu +(Artı) karakterimizle ilgili biraz örnekler verelim:
*(Yıldız) Karakteriyle
>>> liste=["dv","dev","deev","deeeev","deveeeee"]
>>> for i in liste:
if re.match("de*v",i):
print i
dv
dev
deev
deeeev
deveeeee
+(Artı) Karakteriyle
>>> for i in liste:
if re.match("de+v",i):
print i
dev
deev
deeeev
deveeeee
?(Soru İşareti)
Bu karakterimiz *(Yıldız) ve +(Artı) işaretinin birleşimi şeklinde belirtebiliriz.
Hemen örnekleyelim:
*(Yıldız) Karakteriyle
>>> liste=["dv","dev","deev","deeeev","deveeeee"]
>>> for i in liste:
if re.match("de*v",i):
print i
dv
dev
deev
deeeev
deveeeee
+(Artı) Karakteriyle
>>> for i in liste:
if re.match("de+v",i):
print i
dev
deev
deeeev
deveeeee
?(Soru İşareti) Karakteriyle
>>> for i in liste:
if re.match("de?v",i):
print i
dv
dev
deveeeee
Gördüğümüz gibi ?(Soru İşareti) Karakteri d ile v arasındaki e karakterinden hiç geçmeyen kelimeleri ve 1 defa geçen kelimeleri buldu.
Bu karakterimiz * karakteriyle benzerdir.Fakat * karakteriyle kendisinden önceki 0 veya daha fazla
sayıda tekrar eden karakterleri buluyor.+ işareti ise kendisinden önce 1 veya daha fazla olan
karakterleri bulamamızı sağlıyor.
Örnek:
>>> liste=["batman", "catwoman", "zorman", "man"]
>>> for i in liste:
if re.match(".+man",i):
print i
batman
catwoman
zorman
Görüğümüz gibi burada "man" kelimesinin çıktısını vermedi.Bunun neden ".+man" yazmış olmamızdır.
Ama * karakteriyle kullanılan sonuçta ise;
>>> for i in liste:
if re.match(".*man",i):
print i
batman
catwoman
zorman
man
"man" kelimesini ekrana verdi.
Şimdi bu +(Artı) karakterimizle ilgili biraz örnekler verelim:
*(Yıldız) Karakteriyle
>>> liste=["dv","dev","deev","deeeev","deveeeee"]
>>> for i in liste:
if re.match("de*v",i):
print i
dv
dev
deev
deeeev
deveeeee
+(Artı) Karakteriyle
>>> for i in liste:
if re.match("de+v",i):
print i
dev
deev
deeeev
deveeeee
?(Soru İşareti)
Bu karakterimiz *(Yıldız) ve +(Artı) işaretinin birleşimi şeklinde belirtebiliriz.
Hemen örnekleyelim:
*(Yıldız) Karakteriyle
>>> liste=["dv","dev","deev","deeeev","deveeeee"]
>>> for i in liste:
if re.match("de*v",i):
print i
dv
dev
deev
deeeev
deveeeee
+(Artı) Karakteriyle
>>> for i in liste:
if re.match("de+v",i):
print i
dev
deev
deeeev
deveeeee
?(Soru İşareti) Karakteriyle
>>> for i in liste:
if re.match("de?v",i):
print i
dv
dev
deveeeee
Gördüğümüz gibi ?(Soru İşareti) Karakteri d ile v arasındaki e karakterinden hiç geçmeyen kelimeleri ve 1 defa geçen kelimeleri buldu.
Pythonla IP adresimizi öğrenelim
# -*- coding: utf-8 -*-
import urllib2
import socket
url="http://droidpark.com/whatismyip/"
hostname=socket.gethostname()
lanip=socket.gethostbyname(socket.gethostname())
try:
adresiAl=urllib2.urlopen(url)
wanip=adresiAl.read()
adresiAl.close()
except IOError:
print "Şuanda ip adresiniz alamıyoruz";
wanip="Error!";
print "*"*10;
print "Makine adi : %s" % hostname
print "WAN IP Adresi : %s" % wanip
print "LAN IP Adresi : %s" % lanip
print "*"*10
Kaynak
import urllib2
import socket
url="http://droidpark.com/whatismyip/"
hostname=socket.gethostname()
lanip=socket.gethostbyname(socket.gethostname())
try:
adresiAl=urllib2.urlopen(url)
wanip=adresiAl.read()
adresiAl.close()
except IOError:
print "Şuanda ip adresiniz alamıyoruz";
wanip="Error!";
print "*"*10;
print "Makine adi : %s" % hostname
print "WAN IP Adresi : %s" % wanip
print "LAN IP Adresi : %s" % lanip
print "*"*10
Kaynak
19 Şubat 2012 Pazar
Düzenli İfadeler -2-
Metakarakterler
Bu başlık altında python'da metakarakter olarak adlandırılan [] . * + ? {} ^ $ | () \
bu karakterleri göreceğiz.Giriş olarak kısa bir örnek yapalım
>>> import re
>>> liste=["turgay","turgut","özkan","özcan","özhan","kemal","dündar"]
>>> for i in liste:
nesne=re.search("öz[chk]an",i)
if nesne:
print (nesne.group())
özkan
özcan
özhan
şeklinde bir örnek ile [] işareti ile belli bir harf aralıklarını içeren isimleri bulduk.Şimdi
bun karakterlerini işleyelim.
[] Köşeli Parantez
Giriş kısmındada bağsettiğimiz gibi belli bir karakteri yada belli bir aralığı araştırır.
Şimdi önceki yazımda anlattığım match metoduyla bir örnek yapalım...
>>> import re
>>> x=["1php","2python","perl","java","3jquery","4css","c/c++"]
>>> for y in x:
if re.match("[0-9]",y):
print (y)
1php
2python
3jquery
4css
yaptığımız örnek,sayı ile başlayan karakter dizilerini match metoduyla bulmak.
Eğer istersek if re.match("[0-9]",y): ifadesini if re.match("[A-Z]",y): şeklinde değiştirerek
har ile başlayan karakter dizilerini ekrana yazdırabiliriz.Ama tabi bu büyük hat aramsı yapacağı için
bizim örneğimizde çalışacak şekli if re.match("[a-z]",y): şeklindedir.
. Nokta
Bu metakarakteri yeni satır karakteri dışındaki karakterlerin yerini tutar.
>>>liste=['sema', 'sena', 'sefa', 'semra', 'sene']
>>> for i in liste:
if re.match("se.a",i):
print(i)
sema
sena
sefa
yukarıdaki örnek bir dizi oluşturup,dizi için de "se" ile başlayıp "a" ile biteni veya devam edeni
bulmasını istedik.Burada .nokta m,n,f karakterlerinin yerini tutarak işlemi gerçekleştirdi.
Eğer şöyle bir örnek yaparsanız
>>> liste=["ahmet","mehmet","samet",]
>>> for i in liste:
if re.match(".met",i):
print(i)
şeklindeki örnek hiç bir çıktı vermeyecek.Çünkü ilk örnektede olduğu gibi bu metakarakter tek
karakterin yerini tutar.
* Yıldız
Bu metakarakter, kendisinden önce gelen bir ifade kalıbını 0 veya daha fazla karakterde eşleştirir.
Yani .nokta karakterinin çoğulu gibi düşünebiliriz.
>>> liste=["at","sat","saat","kat","tat","strafor"]
>>> liste.append("strafor")
>>> for i in liste:
if re.match("sa*t",i):
print (i)
sat
saat
strafor
Bu örnekte yaptığımızı açıklamak gerekirse,s ile başlayan karakter dizilerini bulmak diyebiliriz.
Burada s ile başlayıp a ile devam eden karakter dizilerini buldu.Ama strafor ne alaka diyebilirsiniz.
Tanımda da dediğimiz gibi 0 veya daha fazla eşleştirme yapar.
Bu başlık altında python'da metakarakter olarak adlandırılan [] . * + ? {} ^ $ | () \
bu karakterleri göreceğiz.Giriş olarak kısa bir örnek yapalım
>>> import re
>>> liste=["turgay","turgut","özkan","özcan","özhan","kemal","dündar"]
>>> for i in liste:
nesne=re.search("öz[chk]an",i)
if nesne:
print (nesne.group())
özkan
özcan
özhan
şeklinde bir örnek ile [] işareti ile belli bir harf aralıklarını içeren isimleri bulduk.Şimdi
bun karakterlerini işleyelim.
[] Köşeli Parantez
Giriş kısmındada bağsettiğimiz gibi belli bir karakteri yada belli bir aralığı araştırır.
Şimdi önceki yazımda anlattığım match metoduyla bir örnek yapalım...
>>> import re
>>> x=["1php","2python","perl","java","3jquery","4css","c/c++"]
>>> for y in x:
if re.match("[0-9]",y):
print (y)
1php
2python
3jquery
4css
yaptığımız örnek,sayı ile başlayan karakter dizilerini match metoduyla bulmak.
Eğer istersek if re.match("[0-9]",y): ifadesini if re.match("[A-Z]",y): şeklinde değiştirerek
har ile başlayan karakter dizilerini ekrana yazdırabiliriz.Ama tabi bu büyük hat aramsı yapacağı için
bizim örneğimizde çalışacak şekli if re.match("[a-z]",y): şeklindedir.
. Nokta
Bu metakarakteri yeni satır karakteri dışındaki karakterlerin yerini tutar.
>>>liste=['sema', 'sena', 'sefa', 'semra', 'sene']
>>> for i in liste:
if re.match("se.a",i):
print(i)
sema
sena
sefa
yukarıdaki örnek bir dizi oluşturup,dizi için de "se" ile başlayıp "a" ile biteni veya devam edeni
bulmasını istedik.Burada .nokta m,n,f karakterlerinin yerini tutarak işlemi gerçekleştirdi.
Eğer şöyle bir örnek yaparsanız
>>> liste=["ahmet","mehmet","samet",]
>>> for i in liste:
if re.match(".met",i):
print(i)
şeklindeki örnek hiç bir çıktı vermeyecek.Çünkü ilk örnektede olduğu gibi bu metakarakter tek
karakterin yerini tutar.
* Yıldız
Bu metakarakter, kendisinden önce gelen bir ifade kalıbını 0 veya daha fazla karakterde eşleştirir.
Yani .nokta karakterinin çoğulu gibi düşünebiliriz.
>>> liste=["at","sat","saat","kat","tat","strafor"]
>>> liste.append("strafor")
>>> for i in liste:
if re.match("sa*t",i):
print (i)
sat
saat
strafor
Bu örnekte yaptığımızı açıklamak gerekirse,s ile başlayan karakter dizilerini bulmak diyebiliriz.
Burada s ile başlayıp a ile devam eden karakter dizilerini buldu.Ama strafor ne alaka diyebilirsiniz.
Tanımda da dediğimiz gibi 0 veya daha fazla eşleştirme yapar.
Kaydol:
Kayıtlar (Atom)