[Çözüldü] python kelime arama

Başlatan marslı, 29 Nisan 2017 - 16:44:50

« önceki - sonraki »

0 Üyeler ve 2 Ziyaretçi konuyu incelemekte.

marslı

merhaba arkadaşlar.
pythonda bir dosya açıp içindeki kelimeye göre if ile tepki vermek istiyorum ama yapamadım.
Amacım şu. bir dosyanın içinde herhangi bir yerinde diyelim ki ubuntu geçiyor. eğer dosyanın içinde ubuntu geçiyorsa bana OK. desin. geçmiyorsa No. desin. Ok-no yapabiliyorum ama dosyanın içindeki kelimeyi arayamadım. nasıl yapabilirim

mimiksiz

#!/usr/bin/env python3

konum = input("Dosya konumunu giriniz: ") #Belge konumunu kullanıcıdan alalım.

dosya = open(konum, "r") #belgeyi okuma kipinde açalım.

aranan = input("Belgede aramak istediğiniz kelimeyi giriniz: ")

aranan_varmi = dosya.read().find(aranan) ###dosya.read() ile okuyalım ve .find(aranan) ile aranan değişkenine girilen kelimeyi arayalım ve buna aranan_varmi değişkeni diyelim.

if aranan_varmi != -1: # aradığımız kelime yoksa çıktı -1 olur. eğer çıktı -1 değilse ok yaz.
print("ok")
else: # aksi halde
print("no")

dosya.close() #dosyayı kapatalım.

marslı

#2
Komutta sanırım yalnışlık var. ekrana aranan_varmi değerinini bastığımda hep sayı çıkıyor. sanırım içindeki karakter sayısını ekrana basıyor. arananı ne yazsam ok diyor.
ve aşağıdaki hatayı verdi.
Traceback (most recent call last):
  File "./sd.py", line 21, in <module>

Bir sorum daha var. Büyük küçük harfe duyarlı olmasını nasıl kapatabiliriz bu işlemde?
Bir de python'da "yada" nasıl bir komuta sahip? örneğin senin verdiğin komuttaki "aranan" değerini kendim atadığımı düşün.
aranan = "Ubuntu".
Burada "yada" olarak veyahutta küçük büyük harf duyarlılığını kapatabilir miyim? Belge içinde çoğu yerde küçük çoğu yerde büyük var.

mimiksiz

#3
Alıntı yapılan: marslı - 30 Nisan 2017 - 10:58:21
Komutta sanırım yalnışlık var. ekrana aranan_varmi değerinini bastığımda hep sayı çıkıyor. sanırım içindeki karakter sayısını ekrana basıyor. arananı ne yazsam ok diyor.
ve aşağıdaki hatayı verdi.
Traceback (most recent call last):
  File "./sd.py", line 21, in <module>

Bir sorum daha var. Büyük küçük harfe duyarlı olmasını nasıl kapatabiliriz bu işlemde?
Bir de python'da "yada" nasıl bir komuta sahip? örneğin senin verdiğin komuttaki "aranan" değerini kendim atadığımı düşün.
aranan = "Ubuntu".
Burada "yada" olarak veyahutta küçük büyük harf duyarlılığını kapatabilir miyim? Belge içinde çoğu yerde küçük çoğu yerde büyük var.


Komutta yanlışlık bulunmuyor. Kopyala yapıştır ile denedim bizzat ve 21 satır değil kodlar. Şu şekilde deneyin.
kopyala yapıştır.
chmod u+x dosya_adi.py #çalışma izni verelim
python3 dosya_adi.py #çalıştıralım

aranan_varmi değeri hep sayı veriyor evet (belgede kaçıncı konumda bulunduğunu gösterir bulur ise) ama eğer belge içinde aranan kelime yoksa -1 sayısını verir yani olmadığını gösterir. Örneğin belge içeriği şu şekilde olsun:

ubuntu, linux mint, zorin os

aranan_varmi değişkenine ubuntu verince 0 yani index numarası yazar. u yazıncada öyle. Yani kelimeye değil aranan değişkene bağlı değer döner. ubuntu yerine ubu yazıncada 0 döndürecek ve buldum "ok" yazacaktır, debian verir isek -1 dönecektir bulamayacaktır.


Büyük küçük harf duyarsızlığını ise .lower() fonksiyonu ile çözeriz:
.lower() fonksiyonu hepsini küçük harfe çevirir.

aranan = input("Belgede aramak istediğiniz kelimeyi giriniz: ").lower()


python da yada komutu "or" dur (gerçi .lower() fonksiyonu ile gerek kalmadı ama)
if x == "ubuntu" or x == "Ubuntu":
    print("ok")




kodların son hali şu şekilde:

#!/usr/bin/env python3

konum = input("Dosya konumunu giriniz: ") #Belge konumunu kullanıcıdan alalım.

dosya = open(konum, "r") #belgeyi okuma kipinde açalım.

aranan = input("Belgede aramak istediğiniz kelimeyi giriniz: ").lower()

aranan_varmi = dosya.read().find(aranan) ###dosya.read() ile okuyalım ve .find(aranan) ile aranan değişkenine girilen kelimeyi arayalım ve buna aranan_varmi değişkeni diyelim.



if aranan_varmi != -1: # aradığımız kelime yoksa çıktı -1 olur. eğer çıktı -1 değilse ok yaz.
print("ok")
else: # aksi halde
print("no")

dosya.close() #dosyayı kapatalım.



marslı

Pardon ok no kafamı karıştırmış sanırım. hatada herhalde boşlukla ilgiliydi. bende de kopyala yapıştır yapınca çalıştı. 

Teşekkür ederim @mimiksiz  yardımın için komutlar çok işe yaradı:) Konu kilitlenebilir 

mimiksiz