Python ile klasör isimlerini topluca değiştirin

2-3 haftadır Python çalışıyorum tekrardan ve bu sefer bir çok şey öğrendim. Öğrendiğim yeni bilgileri sizlerle paylaşayım dedim. Uzun zamandır aklımı meşgul eden bir konu vardı onu Python sayesinde halletim bu sayede. Şimdi kısaca bilgisayarımda fotoğraflarla dolu 20-30 tane klasör var, bunları da hep şu şekilde yazmıştım:

Almanya_ekim_2007
Bolum_temmuz_2006
Bilmemne_hede_höde_2008

Fakat sonraları baktım ki bu biçim bana uygun değil,sondaki yıl ibarelerini en başa getirirsem çok daha uygun olacağını anladım, yani şu şekilde bir şey:

2007_almanya_ekim
2006_bolum_temmuz
2008_bilmemne_hede_höde

Haliyle bir sürü klasör olunca hepsini elle teker teker yapmak yerine bir tane küçük Python betiği yazayım ve kendisi hepsini değiştirsin dedim. İlk önce yazdığım betik aşağıdaki gibi:

  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3.  
  4. import os, re
  5.  
  6. def renamer():
  7.     for filename in os.listdir(os.curdir):     
  8.         if re.search('(\w)_(\d)', filename):
  9.             m = re.compile('([a-z_]*)_([0-9]*)', re.IGNORECASE)
  10.             names  = m.search(filename)
  11.             newfilename = names.group(2) + '_' + names.group(1).lower()
  12.             print newfilename
  13.             #os.rename(filename, newfilename)
  14.  
  15. if __name__ == '__main__':
  16.     renamer()

Betiği klasörleri değiştirmek istediğimiz klasörün içinde çalıştırmamız lazım. Kısaca yaptığı adımlar şunlar(satır numaralarına göre):

  • Satır 7: Klasörün içindeki klasörlerin bir listesini çıkartıyor, ve teker teker isimleri alıyor
  • Satır 8: Eğer klasörlerin sonunda sayılar varsa devam et, yoksa hiç bir şey yapma
  • Satır 9: Klasör isimlerini için bir tane regex ifadesi yazıyoruz.
  • Satır 10:Ardından bu regex ifadesi için bizim klasör’ler aranıyor ve ona göre bulunuyor
  • Satır 11:Bulunduktan sonra names.group() şeklinde bunlara ulaşabiliyoruz, bunlarla da istediğimiz şekildeki yeni dosyamızı oluşturuyoruz, ben 2008 + _ + dosya_deneme şeklinde yaptım, sizler farklı yapabilirsiniz tabi.
  • Satır 12:İstediğimi ifadeler doğru çıkıyor mu, çıktısına bakalım
  • Satır 13:Eğer doğru ise bu satırın önünde # ifadesini kaldıralım.

Öğrendiklerim bazı noktalar var, örneğin regex ifadelerini kesinlikle çok iyi bilmek lazım. Örneğin 9′uncu satırdaki ifade’yi irc’de acemi’den aldım. Ondan önce re.split ile bir yöntem denemiştim fakat tam istediğim gibi olmadı. O yüzden bu gibi işlemler için regex ile aranız ne kadar iyi olursa sizin için daha iyi olacaktır. Örneğin 8′inci satırdaki if durumunu kitaptan bakarak yaptım ve istediğim şekilde çalıştı. \w tüm alfabetik harfler demek, \d ise tüm sayılar demek. Yani eğer harfler_sayılar şeklinde bir dosya ismi var ise filename içinde o zaman devam edecek, yoksa betik hiç bir şey yapmayacak. Ayrıca büyük harfleri küçük harflere dönüştürmek için sadece .lower() ifadesini ekledim, aynı şekilde yeni bir isim oluşturmak tıpkı lego taşları ile oynamak kadar kolay. Gerçekten sevilesi bir dil Python.

Betiği düzgün bir şekilde çalıştıdıktan sonra, sonuçlar da şu şekilde olacaktır:

Python Betik

Ayrıca bu betik yazdığım ilk Python betiği özelliğini taşıyor. O yüzden ki bir sürü hata ya da gereksiz kod parçası olma olasılığı çoktur. Onun dışında Python ile cidden kısa zamanda güzel işler yapabilirsiniz, zaten kullandıkça yeni şeyler öğrenmemek elde değil. Bakalım zaman ne gösterecek inşallah zamanla çok daha farklı şeyler öğrenmiş oluruz.

Openmoko’nun bize getirdiği olağanüstü avantajlar

neo.jpgOpenmoko‘yu bilmeyenler için ilk önce tanıtayım. Openmoko tamamen açık olan, GNU/Linux alttabanına sahip bir platform. Buna da NEO adında dokunmatik ekrana sahip güzel bir telefon. En önemli özelliği ise açık olması ve geliştiriciler için çok güzel imkanlar sunmasıdır. Bu benim ne işime yarayacak diyenler var ise, ne gibi avantajı olduğunu şu şekilde anlatayım.

Bildiğiniz gibi 3 hafta önce iPhone adında bir telefon çıktı. Her ne kadar tüketici aşıkları bu telefonu yüzyılın telefonu olarak ilan etseler bile, hadinden fazla ekisklikleri vardır. Bunları şimdi saymaya başlamak istemiyorum bunun yerine Ethem Tolga’nın yazdığı “iPhone’daki eksiklikler” yazısına bakabilirsiniz. Fakat en önemli noktayı kaçırmayalım, iPhone’nun en kötü ve en berbat yani kapalı bir sistem olmasıdır. Hiç bir işe yaramayan kapalı bir sistem. Ne bir şey geliştirilebiliyor, ne de herhangi bir değişiklik yapılabiliyor. Eliniz kolunuz bağlı. Çök kötü bir duygu olsa gerek. #!/bin/blog’da bu konuya değinmişti.

İşte tam bu anda Openmoko devreye giriyor. Neo adındaki bu telefon açık kaynak kodlu bir sistem. Hem de tam alasından. Nasıl mı. Birincisi alet açık bir şekilde satılıyor. Öyle herhangi bir servis sağlayıcısına bağlılık yok. Aylık ödeme yok. Serbestsiniz yani. Openmoko’nun tüm parçalara ayrılmış belgesi bile var. Güzel bir dökümana sahip. Hangi parça ne anlama geliyor, ne ne içindir gibi sorular aklınızı karıştırmasın. Çünkü resmi dökümanlar var. Resimlerle beraber herşeyi görebilirsiniz. Bu kadar açık yani. Onun dışında açık bir sistemin de açık bir arayüzü vardır. Openmoko için yeni programlar geliştirilmesi için gerekli tüm yazılım bileşenleri mevcut. Yeni başlayanlar için oluşturulan belgesindeSim kartı nasıl takılır” gibi ibareler yerine, doğrudan nasıl shell bağlantısı oluşturulacağı yazılır.

neo1.jpgGördüğünüz gibi olanaklar o kadar geniş ki. Sınır tanımıyor. Devkit adında bir paket varki, içinde yok yok. Bilgisayar ile Openmoko arasından binbir türlü bağlantı kurabiliyorsunuz. İçindeki işletim sistem de tabi ki yukarıda bahsettiğim gibi GNU/Linux.

Gördüğünüz gibi bu kadar güzel, bu kadar kullanışlı, bu kadar bize avantaj sağlayan başka bir telefon yoktur. Openmoko platformu bu sene çığır atacak bir adımdır. Eminim çok muhteşem işler yapılabilecek bu telefon ile. Programlama becerilerim iyice artıktan sonra böyle bir cihaz almayı düşünüyorum. Hem okuduğum mesleğim’e uygun(Elektrik-Elektronik Müh.), hem de ilgi alanıma uyuyor. İleride edindiğim bilgiler ile de daha değişik şeyler yapmam mümkün olacaktır. Tek dejavantajı henüz alpha aşamasında olup, tüm şeyler rayına oturmamış olmasıdır. En az 1 sene daha geçmesi lazım tahminen.

C ile en büyük ve en küçük sayıları bulma

Kod’u çalıştırdıktan sonra, sayılar girmenizi isteyecek, sonra da en büyük ve en küçük sayıyı size gösterecek. İnternet’de çok araştırmıştım fakat bir çözüme ulaşamamıştım. “Largest Smallest Number C Programming” diye aratınca da pek bir şey bulamadım. Başkaları arayınca burayı bulsunlar diye yazdım kelimeleri :) En son çare’yi Freenode’a ##c kanalında buldum. Pragma takma adlı bir kişi bir iki yerde yardım etti bana. Buraya yazdıklarımı bilmezse dahi, kendisine teşekkür ederim.

#include 
#define Sentinel 0

int largest(int max, int a);
int smallest(int min,int b);

int main(void)
{
	int maximum,minimum,num;	

	printf("\nInput the number(Enter %d for exit): ", Sentinel); 	scanf("%d", &num);

	maximum = num;
	minimum = num;

	while (num != Sentinel) {
		maximum = largest(maximum,num);
		minimum	= smallest(minimum,num);
		printf("Input the number(Enter %d for exit): ",Sentinel); 	scanf("%d", &num);
	}

	printf("\nLargest number: %d\n", maximum);
	printf("Smallest number: %d\n\n", minimum); 

	return (0);
}

//Get numbers and compare, return the largest
int largest(int max, int a)
{
	if ( max < a)	{
		return (a);
	}
	else 	{
		return (max);
	}
}

//Get numbers and compare, return the smallest
int smallest(int min,int b)
{
	if ( min > b)		{
		return (b);
	}
	else {
		return (min);
	}
}

Not:(Çok basit olduğunu bliliyorum fakat bulamamıştım belki başkaların işine yarar)
Not 2: Programlama adında yeni bir kategori açtım.

Wordpress kod renklendirme eklentileri

1 hafta önce sizlere Google Code Prettify programını tanıtmıştım. Wordpress ile kullanmak isteyince sorunlar ortaya çıkmıştı. Biraz araştırdım, ve bir ispanyol blogunda eklentiyi gördüm. Fakat eklentiyi kurduktan sonra da bir takım düzeltmeler yapılması gerekiyordu. Bu yüzden başka arayışlara girdim.

Karşılaştığım iki tane güzel eklenti vardı. Biri Dean’s Code Highlighter diğeri de SyntaxHighlighter. İkisini de kurdum denedim, ve Dean’s Code Highlighter eklentisini kullanmaya karar verdim. Diğerinde satıları kısıtlamanın imkanın bulamadım. Bulabilseydim Syntaxhighlighter kullandım. Okulda C dersi alıyoruz bu sene, ve küçük küçük şeyler de yazıyorum. Bunlar da yayımlamak isterken biraz daha okunaklı olmasını istiyorum.

Google Code Prettifier - Kodlarınızı sitenize daha güzel yansıtın

Bir çok geliştirici yazdığı kodları bazen kendi sitesinde yayımlar. Kodları eklerken de sorun çıkabliyor tabi, özellikle 100+ satır kodlar anlaşılmaz duruma gelebiliyor.

Google Code Prettify

Kodları daha iyi bir şekilde göstermek için Google Code Prettifier adlı Javascript betiğini ve Css dosyasını sitelerine yükleyebilirler. “prettyprint” pre-etiketleri arasındaki her kod betik tarafından okunup, css dosyasındaki görünüm özelliklerine göre değiştirilecektir. Renklendirme(Syntax Highlighting)’nin yanında ayrıca kodları otomatik olarak hızalandırma da yapabiliyor. Şu an desteklenenler arasında C, Java, Python, Bash, SQL, HTML, XML, CSS, Javascript, ve Makefile dosyaları var.

Örnek olarak çeşitli dillerdeki görünümü şuradan bakabilirsiniz. Betik özellikle geliştiriciler için güzel bir araç. Bu sayede az da olsa, kodları daha güzel okuyabilme ve ayırtetme imkanı olacak.