Merhabalar,
Benim bir Klasör içinde 10 adet Excel dosyam var. her bir Excel dosyasının içeriği temel olarak aynı
Öğrenci Numarası - Öğrenci Adı Soyadı - Öğrenci Sınıfı - Öğrenci Seçtiği Ders
10 adet excel dosyasıda bu şekilde bir içerik yapısına sahip her sınıfın öğrencileri farklı ben bu 10 adet excel dosyasını bir adet olarak yapabilirim ama bu şekilde olması gerekiyor.
yapmak istediğim olayı ise bir klasör içinde yer alan bu excel dosyaları içerisinde python üzerinde sorgulama yapıp sonuç döndürmek istiyorum. yani python içerisinde ben öğrenci numarası yazdığımda arkaplanda 10 adet xlsx dosyasının içeriğini tarayıp ilgili öğrenci numarasına ait bilgileri getirmesi gerekiyor. şu tarz bir şey var ama Python Kullanarak Excel’den Veri Çekmek | by Mustafa Batuhan Eraslan | Medium
bu tam olarak işimi görmüyor ama benzer mantıkta terminal tarzı çalışan bir şey lazım tüm xlsx dosyalarını tarayan
Merhaba,
Aşağıdaki konuları incelerseniz istediğiniz şeyi yapabileceğinizi söyleyebilirim.
Yine sorun yaşarsanız, denediğiniz,kodları da paylaşarak tekrar yardım isteyebilirsiniz.
Tekrar Merhaba,
Rastgele bilgiler yazdığım 3 adet dosya oluşturup deneme yaptım.
Aşağıdaki kod, istediğin şekilde sonuç almanı sağlayacaktır.
Kodu ve çıktısını inceleyebilirsin.
Sorgu sonucu öğrenci bilgilerinin hangi dosyada bulunduğunun tespiti için veri çerçevesine ve sonuca Dosya Adi sütunu eklenmiştir.
1. alternatif;
KOD;
import pandas as pd
import glob
dosyalar = glob.glob("*.xls*")
print("'.py' dosyası ile aynı dizindeki tüm '.xls*' dosyaları listesi:\n", dosyalar) # bu satırı yazdırmaya gerek yok, kontrol amaçlı eklenmiştir
df_tumu = pd.DataFrame() # boş bir Veri Çerçevesi
for sayi in range(len(dosyalar)):
df = pd.read_excel(dosyalar[sayi])
df["Dosya Adi"] = dosyalar[sayi]
df_tumu = pd.concat([df_tumu, df])
print("Birleştirilen tüm excel dosyalarının içeriği:\n", df_tumu) # bu satırı yazdırmaya gerek yok, kontrol amaçlı eklenmiştir
numara = int(input("Ogrenci numarasını girin: ")) # sorgulanacak öğrenci numarasını belirt
print(df_tumu[df_tumu["Ogrenci No"] == numara]) # Filtre sonucunu ekrana yazdır.
ÇIKTI:
'.py' dosyası ile aynı dizindeki tüm '.xls*' dosyaları listesi:
['3A.xlsx', '5F.xlsx', '6C.xlsx']
Birleştirilen tüm excel dosyalarının içeriği:
Ogrenci No Adi Soyadi Sınıf Sectigi Ders Dosya Adi
0 301 Ali KARA 3A Matematik 3A.xlsx
1 302 Ayşe NAZLI 3A Fen Bilgisi 3A.xlsx
2 303 Hüseyin HAFIZ 3A Coğrafya 3A.xlsx
0 501 Elif ŞEKER 5F Türkçe 5F.xlsx
1 502 Ahmet TAHA 5F Matematik 5F.xlsx
2 503 Yusuf HIZLI 5F Tarih 5F.xlsx
3 504 Burak BEY 5F Bilgisayar 5F.xlsx
0 601 Ebru GÜL 6C Din Kültürü 6C.xlsx
1 602 Arzu ŞEN 6C Biyoloji 6C.xlsx
2 603 Hilal DURU 6C Fizik 6C.xlsx
Ogrenci numarasını girin: 502
Ogrenci No Adi Soyadi Sınıf Sectigi Ders Dosya Adi
1 502 Ahmet TAHA 5F Matematik 5F.xlsx
kontrol amaçlı eklenmiş olan print() fonksiyonu satırlarını siler ya da yorum haline getirip kodu çalıştırısan sadece aşağıdaki çıktıyı göreceksin.
Ogrenci numarasını girin: 502
Ogrenci No Adi Soyadi Sınıf Sectigi Ders Dosya Adi
1 502 Ahmet TAHA 5F Matematik 5F.xlsx
2. alternatif
KOD;
Eğer Ogrenci No sütununu Veri çerçevesinin indeksi yapmak isterseniz aşağıdaki kodu kullanabilirsiniz.
import pandas as pd
import glob
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])
numara = int(input("Ogrenci numarasını girin: ")) # sorgulanacak öğrenci numarasını belirt
print(df_tumu[df_tumu.index == numara]) # Filtre sonucunu ekrana yazdır.
ÇIKTI:
Ogrenci numarasını girin: 502
Adi Soyadi Sınıf Sectigi Ders Dosya Adi
Ogrenci No
502 Ahmet TAHA 5F Matematik 5F.xlsx
Öğrenci numarasını Sıfır olarak yazıp ENTER tuşuna basıncaya kadar döngü devam edecek, Sürekli Öğrenci numarası sorgulanıp çıktı verilecek. Numara olarak Sıfır yazıldığında ekrana Program Sonlandırıldı... bilgisi yazılacak,
Sorgulanan öğrenci numarası, dosya içeriklerinde olmadığı zaman ekrana *** Öğrenci Numarası Bulunamadı *** mesajı yazdırılacak ve döngü devam edecek, yeni numara girilmesi istenecek,
Öğrenci numarası yerine sayısal değerin dışında birşey yazılması halinde, ekrana Geçerli bir sayı değeri girin mesajı yazılacak
import pandas as pd
import glob
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])
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")