Excel hücreleri okuyup listelerken temiz veri şeklinde listelemesi

Herkese Merhaba;

Öncelikle program dilleri ile ilgili bilgim yok, bilgisi olan arkadaşlardan yardım istemek için kayıt oldum :slight_smile: Sorum şu;

En altta kodlarını paylaştığım python kod dizisi ile, form halindeki excel dosyalarını okuyarak belirli hücrelerdeki verileri liste şeklinde excel dosyasına kaydediyorum. Ama listelerden sağ ve sollarında fazla karakter ile birlikte kayıt ediyor. Veriyi çektiği excel dosyalarında ilgili hücrelerde “Boşluk, birleşik hücre, tarih formatı” da var. Ayrıca her dosyada her hücrede veri olmayabiliyor.(Boşta kalabiliyor) Veri çekmede sorun yaşamıyorum ancak fazlalıklardan bir türlü kurtulamadım. Yardımcı olabilecek var mı?

Verileri okuduğu örnek excel dosyalarından örnek:( Yaklaşık 500-700 dosya var ve artıyor)

Dosyaların Örnekleri;
https://drive.google.com/drive/folders/1LwnJuiscGEDF7oNk4FBCV6tPHEkd_-G4?usp=sharing

Gitmesini İstediğim Fazlalıkların(TemizVeri Haline Getirmek İstediğim) Ekran Görüntüsü;

import os
import pandas as pd

# Sonuçları saklayacak DataFrame oluştur
result_df = pd.DataFrame(columns=['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ'])

# Çalışma dizini (current directory) içindeki Excel dosyalarını al
excel_files = [f for f in os.listdir() if f.endswith('.xlsm')]

# Her Excel dosyasını işle
for excel_file in excel_files:
    try:
        # Excel dosyasını oku
        df = pd.read_excel(excel_file, header=None, engine='openpyxl')
        
        # Belirtilen hücreleri al ve sonuç DataFrame'e ekle
        result_df = result_df._append({
            'A': df.iloc[18, 3:13].dropna().tolist(),
            'B': df.iloc[19, 3:13].dropna().tolist(),
            'C': df.iloc[20, 3],
            'D': df.iloc[20, 4:6].dropna().tolist(),
            'E': df.iloc[21, 3:6].dropna().tolist(),
            'F': df.iloc[22, 3:5].dropna().tolist(),
            'G': df.iloc[23, 3:6].dropna().tolist(),
            'H': df.iloc[23, 7:13].dropna().tolist(),
            'I': df.iloc[24, 3:13].dropna().tolist(),
            'J': df.iloc[25, 3:13].dropna().tolist(),
            'K': df.iloc[26, 3:13].dropna().tolist(),
            'L': df.iloc[27, 3:13].dropna().tolist(),
            'M': df.iloc[28, 1:13].dropna().tolist(),
            'N': df.iloc[36, 2:6].dropna().tolist(),
            'O': df.iloc[37, 2:6].dropna().tolist(),
            'P': df.iloc[36, 9:13].dropna().tolist(),
            'Q': df.iloc[52, 5:13].dropna().tolist(),
            'R': df.iloc[55, 5:13].dropna().tolist(),
            'S': df.iloc[60, 5:13].dropna().tolist(),
            'T': df.iloc[61, 5:13].dropna().tolist(),
            'U': df.iloc[62, 5:13].dropna().tolist(),
            'V': df.iloc[63, 5:13].dropna().tolist(),
            'W': df.iloc[72, 6:13].dropna().tolist(),
            'X': df.iloc[74, 6:13].dropna().tolist(),
            'Y': df.iloc[76, 6:13].dropna().tolist(),
            'Z': df.iloc[79, 1],
            'AA': df.iloc[80, 1],
            'AB': df.iloc[83, 1],
            'AC': df.iloc[84, 1],
            'AD': df.iloc[104, 4:13].dropna().tolist(),
            'AE': df.iloc[105, 4:13].dropna().tolist(),
            'AF': df.iloc[106, 4:13].dropna().tolist(),
            'AG': df.iloc[108, 4:13].dropna().tolist(),
            'AH': df.iloc[109, 4:13].dropna().tolist(),
            'AI': df.iloc[115, 1:4].dropna().tolist(),
            'AJ': df.iloc[121, 11:13].dropna().tolist(),
        }, ignore_index=True)
    except Exception as e:
        print(f"Hata: {e}")

# Sonuçları "Sonuc.xlsm" adlı bir Excel dosyasına kaydet
result_df.to_excel("Sonuc.xlsx", index=False, engine='openpyxl')
kodu buraya yazın veya yapıştırın

Verileri tolist() ile listeye çevirdiğin için olabilir mi? :slight_smile:
.dropna().tolist() bu kodu neden yazdın anlayamadım.

Örnek dosyanın 2 kopyasını alarak içeriklerinde ufak değişikkler yaptım ve aşağıdaki kod ile verileri tek dosyada topladım. Aslında sen zaten kodun çooook büyük kısmını yazmışsın. Hatta fazla kod yazmışşsın :slight_smile:

import os
import pandas as pd

# Sonuçları saklayacak DataFrame oluştur
result_df = pd.DataFrame(columns=['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ'])

# Çalışma dizini (current directory) içindeki Excel dosyalarını al
excel_files = [f for f in os.listdir() if f.endswith('.xlsm')]

# Her Excel dosyasını işle
for excel_file in excel_files:
    try:
        # Excel dosyasını oku
        df = pd.read_excel(excel_file, header=None, engine='openpyxl')
        
        # Belirtilen hücreleri al ve sonuç DataFrame'e ekle
        result_df = result_df._append({
            'A': df.iloc[18, 3],
            'B': df.iloc[19, 3],
            'C': df.iloc[20, 3],
            'D': df.iloc[20, 4],
            'E': df.iloc[21, 3],
            'F': df.iloc[22, 3],
            'G': df.iloc[23, 3],
            'H': df.iloc[23, 7],
            'I': df.iloc[24, 3],
            'J': df.iloc[25, 3],
            'K': df.iloc[26, 3],
            'L': df.iloc[27, 3],
            'M': df.iloc[28, 1],
            'N': df.iloc[36, 2],
            'O': df.iloc[37, 2],
            'P': df.iloc[36, 9],
            'Q': df.iloc[52, 5],
            'R': df.iloc[55, 5],
            'S': df.iloc[60, 5],
            'T': df.iloc[61, 5],
            'U': df.iloc[62, 5],
            'V': df.iloc[63, 5],
            'W': df.iloc[72, 6],
            'X': df.iloc[74, 6],
            'Y': df.iloc[76, 6],
            'Z': df.iloc[79, 1],
            'AA': df.iloc[80, 1],
            'AB': df.iloc[83, 1],
            'AC': df.iloc[84, 1],
            'AD': df.iloc[104, 4],
            'AE': df.iloc[105, 4],
            'AF': df.iloc[106, 4],
            'AG': df.iloc[108, 4],
            'AH': df.iloc[109, 4],
            'AI': df.iloc[115, 1],
            'AJ': df.iloc[121, 11],
        }, ignore_index=True)
        
    except Exception as e:
        print(f"Hata: {e}")

# Sonuçları "Sonuc.xlsm" adlı bir Excel dosyasına kaydet
result_df.to_excel("Sonuc.xlsx", index=False, engine='openpyxl')

Hocam çook teşekkürler :slight_smile: Denedim gayet başarılı. Büyük zahmetten kurtarmış oldunuz beni.

İyi Çalışmalar

Rica ederim.

Soruya bakanların, sorunun çözüldüğünü bilmesi ve cevap için vakit harcamaması adına, cevabı “ÇÖZÜM” olarak işaretleyebilirsin.

İyi günler dilerim.

1 Beğeni

Merhaba,
Hangi cevap sorunuzu çözdüyse, o cevabı Çözüm olarak seçmelisiniz ki, cevap mesajı, sorunuzun hemen altına bağlantı olarak eklensin. :slight_smile:

append metoduna, Liste veri tiplerinden aşina olmama rağmen, sizin kodlarınızda gördüğüm (Pandas içerisindeki) ._append yöntemini bilmediğim için, bu tür bir veri toplama ihtiyacım olsa nasıl çözerdim diye düşünerek, kendi bilgim doğrultusunda çabalayarak alternatif bir kod da ben yazdım. Temel mantık aynı ancak ben işi biraz daha uzatmış oldum. Neyse kodları aşağı ekleyeyim, belki ileride bir kullanıcıya yardımcı olur.

Kod mantığını açıklamak gerekirse ;

  • Sizin yaptığınız gibi, başlangıçta tüm verilerin toplanacağı bir veri çerçevesi oluşturuluyor (df_nihai)
  • Dizindeki tüm “xlsm” uzantılı dosyalar tarayıp içeriğinden istenilen veriler alınarak değişkenlere atanıyor.
  • Bu verilerden, bir sözlük yapısı (veri tipi) oluşturuluyor.
  • Oluşturulan sözlük yapısı, geçici olarak kullanılacak veri çerçevesine dönüştürülüyor (df_gecici)
  • Geçici Tüm verilerin toplanacağı Veri Çerçevesi ile Geçici Veri Çerçevesi concat yöntemi ile alt alta birleştiriliyor.
  • Son olarak tüm verilerin toplandığı Veri Çerçevesi Excel dosyası olarak dışa aktarılıyor / kaydediliyor. (Tüm_Veriler.xlsx)
import os
import pandas as pd

# Sonuçları saklayacak DataFrame oluştur
df_nihai = pd.DataFrame(columns=['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ'])

# Çalışma dizini (current directory) içindeki Excel dosyalarını al
excel_dosyalari = [f for f in os.listdir() if f.endswith('.xlsm')]

# Her Excel dosyasını işle
for excel_dosyasi in excel_dosyalari:
    try:
        # Excel dosyasını oku
        df_excel_icerigi = pd.read_excel(excel_dosyasi, header=None, engine='openpyxl')
        
        a = df_excel_icerigi.iloc[18, 3]
        b = df_excel_icerigi.iloc[19, 3]
        c = df_excel_icerigi.iloc[20, 3]
        d = df_excel_icerigi.iloc[20, 4]
        e = df_excel_icerigi.iloc[21, 3]
        f = df_excel_icerigi.iloc[22, 3]
        g = df_excel_icerigi.iloc[23, 3]
        h = df_excel_icerigi.iloc[23, 7]
        i = df_excel_icerigi.iloc[24, 3]
        j = df_excel_icerigi.iloc[25, 3]
        k = df_excel_icerigi.iloc[26, 3]
        l = df_excel_icerigi.iloc[27, 3]
        m = df_excel_icerigi.iloc[28, 1]
        n = df_excel_icerigi.iloc[36, 2]
        o = df_excel_icerigi.iloc[37, 2]
        p = df_excel_icerigi.iloc[36, 9]
        q = df_excel_icerigi.iloc[52, 5]
        r = df_excel_icerigi.iloc[55, 5]
        s = df_excel_icerigi.iloc[60, 5]
        t = df_excel_icerigi.iloc[61, 5]
        u = df_excel_icerigi.iloc[62, 5]
        v = df_excel_icerigi.iloc[63, 5]
        w = df_excel_icerigi.iloc[72, 6]
        x = df_excel_icerigi.iloc[74, 6]
        y = df_excel_icerigi.iloc[76, 6]
        z = df_excel_icerigi.iloc[79, 1]
        aa = df_excel_icerigi.iloc[80, 1]
        ab = df_excel_icerigi.iloc[83, 1]
        ac = df_excel_icerigi.iloc[84, 1]
        ad = df_excel_icerigi.iloc[104, 4]
        ae = df_excel_icerigi.iloc[105, 4]
        af = df_excel_icerigi.iloc[106, 4]
        ag = df_excel_icerigi.iloc[108, 4]
        ah = df_excel_icerigi.iloc[109, 4]
        ai = df_excel_icerigi.iloc[115, 1]
        aj = df_excel_icerigi.iloc[121, 11]

        # Excel içeriğinden alınan verileri, bir sözlük yapısında topla.
        datas = {'A': [a], 'B':[b], 'C': [c], 'D': [d], 'E': [e], 'F': [f], 'G': [g], 'H': [h], 
                 'I': [i], 'J': [j], 'K': [k], 'L': [l], 'M': [m], 'N': [n], 'O': [o], 'P': [p], 
                 'Q': [q], 'R': [r], 'S': [s], 'T': [t], 'U': [u], 'V': [v], 'W': [w], 'X': [x], 
                 'Y': [y], 'Z': [z], 'AA': [aa], 'AB': [ab], 'AC': [ac], 'AD': [ad], 'AE': [ae], 
                 'AF': [af], 'AG': [ag], 'AH': [ah], 'AI': [ai], 'AJ': [aj]}
        
        # Toplanan verilerden oluşan sözlük yapısını, geçici bir Veri Çerçevesine dönüştür.
        df_gecici = pd.DataFrame(datas)
        
        # nihai_df ile df_gecici içeriğini alt alta birleştir.
        df_nihai = pd.concat([df_nihai, df_gecici])
        
    except Exception as e:
        print(f"Hata: {e}")

# Sonuçları "Sonuc.xlsm" adlı bir Excel dosyasına kaydet
df_nihai.to_excel("Tüm_Veriler.xlsx", index=False, engine='openpyxl')

Sözlük (dict) yapısı yerine Liste (list) veri yapısı kullanarak Veri Çerçevesi oluşturmak isteseydik, aşağıdaki kod işimize yarayacaktı :slight_smile:

import os
import pandas as pd

# Sütun başlıklarını oluştur
sutunlar = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',  'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ']

# Nihai sonuçların saklanacağı DataFrame oluştur
df_nihai = pd.DataFrame(columns=sutunlar)

# Çalışma dizini içindeki Excel dosyalarını al
excel_dosyalari = [f for f in os.listdir() if f.endswith('.xlsm')]

# Her Excel dosyasını döngüye sok
for excel_dosyasi in excel_dosyalari:
    try:
        # Excel dosyasını oku
        df_excel_icerigi = pd.read_excel(excel_dosyasi, header=None, engine='openpyxl')
        
        # İlgili hücre değerlerini değişkenlere ata
        a = df_excel_icerigi.iloc[18, 3]
        b = df_excel_icerigi.iloc[19, 3]
        c = df_excel_icerigi.iloc[20, 3]
        d = df_excel_icerigi.iloc[20, 4]
        e = df_excel_icerigi.iloc[21, 3]
        f = df_excel_icerigi.iloc[22, 3]
        g = df_excel_icerigi.iloc[23, 3]
        h = df_excel_icerigi.iloc[23, 7]
        i = df_excel_icerigi.iloc[24, 3]
        j = df_excel_icerigi.iloc[25, 3]
        k = df_excel_icerigi.iloc[26, 3]
        l = df_excel_icerigi.iloc[27, 3]
        m = df_excel_icerigi.iloc[28, 1]
        n = df_excel_icerigi.iloc[36, 2]
        o = df_excel_icerigi.iloc[37, 2]
        p = df_excel_icerigi.iloc[36, 9]
        q = df_excel_icerigi.iloc[52, 5]
        r = df_excel_icerigi.iloc[55, 5]
        s = df_excel_icerigi.iloc[60, 5]
        t = df_excel_icerigi.iloc[61, 5]
        u = df_excel_icerigi.iloc[62, 5]
        v = df_excel_icerigi.iloc[63, 5]
        w = df_excel_icerigi.iloc[72, 6]
        x = df_excel_icerigi.iloc[74, 6]
        y = df_excel_icerigi.iloc[76, 6]
        z = df_excel_icerigi.iloc[79, 1]
        aa = df_excel_icerigi.iloc[80, 1]
        ab = df_excel_icerigi.iloc[83, 1]
        ac = df_excel_icerigi.iloc[84, 1]
        ad = df_excel_icerigi.iloc[104, 4]
        ae = df_excel_icerigi.iloc[105, 4]
        af = df_excel_icerigi.iloc[106, 4]
        ag = df_excel_icerigi.iloc[108, 4]
        ah = df_excel_icerigi.iloc[109, 4]
        ai = df_excel_icerigi.iloc[115, 1]
        aj = df_excel_icerigi.iloc[121, 11]

        # Excel içeriğinden alınan verileri, bir liste yapısında topla.
        veriler = [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, aa, ab, ac, ad, ae, af, ag, ah, ai, aj]
        
        # Toplanan verilerden oluşan liste yapısını, geçici bir Veri Çerçevesine dönüştür.
        df_gecici = pd.DataFrame([veriler], columns= sutunlar)
        
        # nihai_df ile df_gecici içeriğini alt alta birleştir.
        df_nihai = pd.concat([df_nihai, df_gecici])
        
    except Exception as e:
        print(f"Hata: {e}")

# Sonuçları "Sonuc.xlsm" adlı bir Excel dosyasına kaydet
df_nihai.to_excel("Tüm_Veriler.xlsx", index=False)
1 Beğeni