Python Alıştırma 3 [Çözüm Yayınlandı]

Başlatan dwain, 31 Temmuz 2010 - 14:54:20

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

dwain

Merhabalar,

Birkaç gün yeni bir alıştırma ekleyemedim. Bugün vakit bulabildim ve yine arkadaşım tarafından bana gönderilen alıştırmayı burada sizlerle paylaşıyorum.

Handling CSV files in Python:

1. Bir text dosyasını okutuyoruz.
2. İçindeki kelimelerin frequency (tekrar sayıları) sayılarını ve text içerisindeki ilk konumlarını (birden fazla tekrar etmiş olabilir sadece ilk konumunu) hesaplıyoruz.
3. Hesaplanan sonucu output.csv dosyası oluşturup içine yazdırıyoruz.

[Örnek] output.csv

---
word,frequency,first_pos
araba,12,121
gezi,34,23
---


Evet üçüncü alıştırma da csv dosyalarını kullanmak için bir aşinalık yaratacak bir çalışma. Bir gün sonra kendi yaptığım çalışmayı burada paylaşıyor olacağım.

Kolay gelsin...

Kaan Aslan
Mac OSX

sem

Çok yararlı bir şey sunuyorsunuz ilgilenenler için... Teşekkürler paylaşım için...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

micro

Alıntı yapılan: sem0900 - 31 Temmuz 2010 - 15:00:54
Çok yararlı bir şey sunuyorsunuz ilgilenenler için... Teşekkürler paylaşım için...

aynen katılıyorum çok iyi bir öğrenme ve geliştirme yöntemi,emeklerinize sağlık.

dwain

#3
Merhabalar,

Olumlu düşünceleriniz için çok teşekkür ederim. Elimden geldiğince bu gibi paylaşımları yapıyor olacağım. Aslında aklımda bir şekilde Django alıştırmaları yaptırmak var. Ancak Django hakkında da bilgi vermek gerekebilir. Belki bir Türkçe `belge` hazırlayarak buna benzer bir şey yapabilirim ama ne kadar sürer emin olamıyorum. :) Eğer imkanım olursa Web Application kısmına da biraz değinmek istiyorum ileride. Ama şu anda dersimiz python :)

Kendim hazırladığım cevabı aşağıda paylaşıyorum. Ayrıca bu kod tek seferde de yazılabilirdi. Ancak bu sefer kodlamayı fonksiyonlara ayırarak yaptım. Amacım fonksiyon kullanımının en doğru şekillerini yansıtmak. Özellikle bir fonksiyonun genellikle bir değer döndürmesi gerekiyor olması gibi... Bu döndürülen değeri de farklı bir fonksiyon içerisinde "global" tanımlaması olmadan nasıl kullandığımızı örneklemeye çalıştım. Yeni başlayanlar genellikle fonksiyonları öğrendiğinde return fonksiyonunu kullanmadan tanımladıkları fonksiyonları bitirmeye eğilimlidirler. Ben de öyleydim. :) global ı kullanmadan fonksiyonlar arası iletişim çalışmalarımda az hatalar almadım. :) O yüzden bugünkü alıştırmanın cevabında mümkün olduğunca fonksiyonlar vasıtasıyla return komudunu kullanarak alıştırmayı tamamladım. Herkesin bakış açısı farklı olabilir tabi ki... Eğer farklı paylaşımlarınız olursa, ya da bu kodu farklı bir şekilde de yazabiliriz diyorsanız lütfen kodlarınızı paylaşın.

Bir sonraki alıştırmada tekrar görüşmek üzere...

import csv

def listele(text):
    dosya = open(text, "r")
    oku = dosya.read().replace("\r\n", "").replace(",", "")
    liste1 = oku.split(" ")
    return liste1
   
def freq(kelime, text): #kelimenin freq sayisi hesaplaniyor.
    liste = listele(text)
    l = liste.count(kelime)
    return l

def islem(text):
    sozluk = {}
    liste2 = listele(text)
    for i in set(liste2):
        p=liste2.index(i)
        sozluk[i]={"freq":freq(i, text), "pos":p} 
    return sozluk

def output(text, dosyaismi):
    m = islem(text)
    file = open(dosyaismi+".csv", "w")
    writer = csv.writer(file, delimiter=",")
    for x in m.items():
        line = x[0], x[1]["freq"], x[1]["pos"]
        writer.writerow(line)
    file.close()
   
#isteyenler asagidaki kod ile bir csv dosyasinin icini ekrana yazdirabilir.

#def input(csvfile):
#    file = open(csvfile, "r")
#    reader = csv.reader(file)
#    for row in reader:
#         print row

#Örnek kodu çağrımı için aşağıdaki kodu girebilirsiniz.
#Burada text.txt dosyasının bu modül ile aynı klasörde olduğunu varsayıyoruz.
#"csvdosyam" diye adlandirdigimiz isim ise bize çıktı olarak vereceği dosyanın adı oluyor.

#output("text.txt", "csvdosyam")


Kaan Aslan
Mac OSX