konusunda olduğu gibi excel dosyası içerisinde çalışma yapıyorum. işlemi kolaylaştırmak adına pyinstaller ile projemi exe olarak çevirdim. program çalışmasına rağmen excel içinde gerekli sorguyu yapmıyor benzer şekilde py dosyasını cmd üzerinde çalıştırınca açılıyor ama excel formu içerisinde yine sorgu döndürmüyor. uygulama üzerinde eğer öyle bir öğrenci yok ise döndürmesi istediğim mesajı sadece döndürüp duruyor ama ide üzerinde yapınca sorunsuz olarak çalışıyor acaba glob.glob(“.xls”) bu konutun yerine direkt olarak excel dosyalarının bulunduğu klasör adını mı vermem gerekiyor?
glob, Python’da belirli bir dizin (klasör) içindeki dosyaları listelememizi sağlayan bir kütüphane/modüldür.
Doğal olarak, kod çalıştığında hangi dizindeki xls* dosyalarını tarayıp sonuç vermesi isteniyorsa o dizin yolunun belirtilmesi gerekir.
Merhaba,
Tkinter, PyQt ya da bir başka GUI kütüphanesi kullanarak arabirim oluşturduğunuz dosyayı mı exe’ye çevirdiniz yoksa exe’ye çevirdiğiniz dosya direkt konsolu açıp oradan sorgulama yapmanızı mı sağlıyor?
Kabaca Tkinter kütüphanesinin temel bileşenleri ile basit bir GUI arabirimi oluşturdum. Kodlar tamamen sağlıklı çalışmıyor. (Öğrenci numarası olarak sayısal değerin dışında karakter girince program çöküyor)
Bu tür bir kullanıcı arabirimi ile sorgulama yapmayı düşünüyor musunuz?
import tkinter as tk
import pandas as pd
import glob
pencere = tk.Tk()
pencere.geometry("500x200+500+350")
pencere.title(".:: Sorgula :..")
ogrenci_no_etiket = tk.Label(
pencere,
text="Sorgulamak istediğiniz öğrenci numarasını girin: ",
font="Tahoma 12"
)
ogrenci_no_etiket.pack()
giris = tk.Entry(
pencere,
width=50
)
giris.pack()
giris.insert(
string=0,
index=0
)
def butonFonksiyonu():
no = giris.get()
try:
numara = int(no)
if numara in df_tumu.index:
sonuc_etiket.config(text = df_tumu[df_tumu.index == numara]) # Filtre sonucunu ekrana yazdır.
else:
sonuc_etiket.config(text = "Kayıtlarda " + giris.get() + " Numaralı Öğrenci Bulunamadı.")
except ValueError:
sonuc_etiket.config(text = "Geçerli bir sayı değeri girin")
sonuc_etiket.config(
bg="red",
font="Verdana",
text = df_tumu[df_tumu.index == numara]
)
giris.delete(0, 'end')
buton = tk.Button(
pencere,
text="Sorgula",
font=12,
height=1,
width=30,
cursor="hand2",
command= butonFonksiyonu
)
buton.pack()
sonuc_etiket = tk.Label(
pencere,
text="Sonuc ekranı",
font="Tahoma 12",
bg="red",
fg="white",
wraplength=450
)
sonuc_etiket.pack()
dosyalar = glob.glob("*.xls*")
df_tumu = pd.DataFrame() # boş bir Veri Çerçevesi
for sayi in range(len(dosyalar)):
df = pd.read_excel(dosyalar[sayi], index_col="Ogrenci No")
df["Dosya Adi"] = dosyalar[sayi]
df_tumu = pd.concat([df_tumu, df])
pencere.mainloop()
cevap için teşekküller exe çevirdiğim dosya komut satırı açıp oradan sorgulama yapmamı sağlıyor. zaten arayüz olarak değilde komut satırı olarak sorgulama yapmam daha iyi yoksa arayüz olayını c# ile çözüme ulaştırabiliyorum ama python da yeni sayılırım hızlı ve performans açısından konsol olarak sorgulama yapmam daha iyi olur. glob.glob(“.xls”) üzerinden py dosyasının bulunduğu dizinde olan tüm xlsx dosyaları üzerinde ide üzerinde sorgulama yapılabiliyor ama komut satırında yapılamıyor acaba glob.glob(“.xls”) üzerinde bir şekilde o dizini belirtmem mi gerekiyor?
Merhaba,
Evet üstteki mesajımda da yazdığım gibi kod çalıştığında hangi dizindeki xls dosyalarını tarayıp sonuç vermesi isteniyorsa o dizin yolunun belirtilmesi gerekir.
Aşağıdaki kodu inceleyebilirsin. Windows işletim sisteminde yaptığım denemede exe uzantılı dosya çalıştı ve doğru sonuç verdi. EXE dosyasının, Excel dosyaları ile aynı klasörde olma zorunluluğu yok.
from pandas import read_excel
from pandas import concat
from pandas import DataFrame
from glob import glob
dosyalar = glob("C:\\Users\\KULLANICI_ADI\\Documents\\Ogrenci_Sorgu/*.xls*")
df_tumu = DataFrame() # boş bir Veri Çerçevesi
for sayi in range(len(dosyalar)):
df = read_excel(dosyalar[sayi], index_col="Ogrenci No")
df_tumu = concat([df_tumu, df])
while True:
print("\nProgramdan çıkmak için 0 (sıfır) ve ardından ENTER tuşuna basın.")
no = input("Ogrenci numarasını girin: ") # sorgulanacak öğrenci numarasını belirt
try:
numara = int(no)
if numara == 0:
print("\nProgram Sonlandırıldı...")
break
elif numara in df_tumu.index:
print(df_tumu[df_tumu.index == numara]) # Filtre sonucunu ekrana yazdır.
else:
print("\n*** Öğrenci Numarası Bulunamadı ***")
except ValueError:
print("Geçerli bir sayı değeri girin")
Bu arada Performans olarak Python konusunda tam uzmanlığım yok ama diğer dillere örnek verecek olursak eğer yazılımcı ve proje ne ise gerek exe olsun gerek diğer diller olsun kullanılan teknoloji ve sistem ne ise o Performansı etkiliyor. .py olarak başta msdos üzerinden iş görür dedim ama “python C:\Users\user\Desktop\home\main\dosya\www.py” komutu ile örnek projemi ms-dos üzerinden açmak yada ide üzerinden kullanmam gerekiyordu yada .py dosyalarına otomatik dos komutunda açılacak hale getirmem.
pyinstaller ile exe olarak işi çözdüm tabi ben sadece öğrenci numarası ile iş görecem ama eğer filtreleme olayı olsaydı mecbur gui kütüphanesi eklemem gerekiyordu. python için nasıl bilmiyorum ama kütüphane , framework gibi şeyler çok iyi bir yazılımcı değilsen benim yukarıda 1mb bile belki tutmayacak programın boyutunu sırf o kütüphaneler eklendi diye bir kaç gb dosya boyutuna getiriyor.
Benim biraz bu konuda takıntım var diyebilirim daha çok işimi kolaylaştıran şeyler ile ilgileniyorum ama temel olarak program boyutu , üçüncü taraf yazılım bağımsızlığı ve platform bağımsızlığı gibi şeyler önemli. python üzerine yardım forumları çok az yada kaynak yetersiz c# için belirli kaynak kodu indirip obje yönelimli programı rahatlık ile yapılabiliyor python 'da nesne tabanlı olayı için ide yok sadece kütüphane var onda da kaynaklar az ama ben bu proje için mysql kullanıp php ile gerekli işlemleri yapabilirim hem her cihazdan hem de her yerden bağlanabilirsin. ama olayın aslı python ve r programlama dili ile biraz yapay zeka ağırlıklı bir çalışma yapmayı hedefliyorum öğrencilerin ve hocaların izlediği yollar ile ilgili yolun başındayım ama umarım sonuna kadar gidebilirim teşekkürler ilginiz için