Python İle Yapılabilir mi?

Öncelikle herkes’e merhaba bir kaç aydır hemn öğrenmek hemde elimde bulunan excell i program a çevirmek için uğraşmaktayım benim bir problemim var.

Bazı bilgiler elimde şu şekilde geçmekte ;

GRUP A
A1…21
B1…10
C5…3
D…30

GRUP B

A1…8
B5…10
CC…3
D…13

Yukarıda belirtildiği gibi bir kaç grubum mevcut ben bunları ayrı bir grupta toplamka istiyorum ama farkındaysanız aynı isimde olanlarda var farklı isimde olanlarda var benim 3. grubum şu şekilde olmasını istiyorum

GRUP X
A1…29
B1…10
C5…3
D…43
CC…3
B5…10

Bu şekilde olmasını isitorum birde bunu alfb ile dizilmiş olmasını fakat ne kadar uğraştıysam birtürlü çözemedim

NOT: forumda yeniyim bundan dolayı yanlışyerde paylaşım yapmış olabilirim şimdiden özür dilerim.

saygılarla…

Merhaba, evet Python ile bu işlem yapılabilir. Mesela şöyle bir örnek üzerinde bir deneme yaptım:

a.xlsx isimli bir dosya oluşturdum ve içine şu değerleri yazdım.

2018-09-18%2018-10-52%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

b.xlsx isimli bir dosya oluşturdum ve içine aşağıdaki değerleri yazdım.

2018-09-18%2018-09-22%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

Ve yanlış anlamadıysam, siz yeni bir sayfaya, her iki tabloda bulunan değerleri eklemek istiyorsunuz. Şayet her iki tablonun aynı hücrelerinde değerler varsa bu değerler toplansın ve yeni değer üçüncü sayfaya tıpkı aşağıdaki gibi eklensin.

2018-09-18%2018-53-59%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

Yukarıdaki üçüncü tabloyu oluşturmak için aşağıdaki kodları kullandım:

#!/usr/bin/python3.6
# -*- coding: utf-8 -*-

import xlrd
import xlwt

dosya_adi_1 = "a.xlsx"
dosya_adi_2 = "b.xlsx"

dosya_oku_1 = xlrd.open_workbook(dosya_adi_1)
dosya_oku_2 = xlrd.open_workbook(dosya_adi_2)

sayfa_1 = dosya_oku_1.sheet_by_name("Çizelge1")
sayfa_2 = dosya_oku_2.sheet_by_name("Çizelge1")


def verileri_al(sayfa):
    sutun_listesi = {}
    for satir in range(sayfa.nrows):
        satir_listesi = {}
        for sutun in range(sayfa.ncols):
            satir_listesi[sutun] = sayfa.cell_value(satir, sutun)
        sutun_listesi[satir] = satir_listesi
    return sutun_listesi


yeni_dosya = xlwt.Workbook()
yeni_sayfa = yeni_dosya.add_sheet("Çizelge1")

veri_1 = verileri_al(sayfa_1)
veri_2 = verileri_al(sayfa_2)

for key, value in veri_1.items():
    for _key, _value in veri_2.items():
        if key == _key:
            for sub_key, sub_value in value.items():
                for _sub_key, _sub_value in _value.items():
                    if _sub_key == sub_key:
                        try:
                            yeni_sayfa.write(key, sub_key, sub_value + _sub_value)
                        except TypeError:
                            if sub_value == "":
                                yeni_sayfa.write(key, sub_key, _sub_value)
                            elif _sub_value == "":
                                yeni_sayfa.write(key, sub_key, sub_value)


def disarida_kalan_hucreleri_ekle(sozluk_1, sozluk_2):
    for key_, value_ in sozluk_2.items():
        if key_ not in sozluk_1.keys():
            for sub_key_, sub_value_ in value_.items():
                yeni_sayfa.write(key_, sub_key_, sub_value_)


disarida_kalan_hucreleri_ekle(sozluk_1=veri_1, sozluk_2=veri_2)
disarida_kalan_hucreleri_ekle(sozluk_1=veri_2, sozluk_2=veri_1)

yeni_dosya.save("c.xlsx")

Not: Ubuntu’da Libre Office kullanılarak denenmiştir.

verdiğiniz bilgiler için cok teşekkür ederim evet bir nevi bu şeklide birşey yapmaya çalışıyorum bir nevi derken ki kastım ben bilgileri sütünlara yada satırlara girmek yerime zaten elimde bulunan bir grupta 20 satır gibi bir durum var bazı gruplar 18 bazı gruplar 4 bazı gruplarda 10 vs vs durumlar mevcu vede bunlar aynı sıralamada değiller mesela

Grup A

aa…20
bb…10
.
.
.
xv…3

Grup B

xv…31
.
.
.
bb…20
aa…136

gibi bir durum söz konusu yani hem sıralama elimde net değil hemde gelecek isimler ama iki listede aynı isimde elemanlar bulunabiliyor ve bulunmama olayıda var böylelikle aynı isimde olmayan grup elemanlarıda 3. grupta yer alması gerekmekte birde daha öncesinde bende sizin gibi excell üzerinden veri deposu gibi yapmaya çalıştım ama oda olmadı :dalgın: bende tekrardan direk bilgileri inport etmek için bir kaç değer denedim ama oda olmadı şimdi anlatımda ne kadar karıştıysam hepsi denemelerden kaynaklı bilginize

tekrardan vermiş olduğunuz bilgiler için teşekkür ederim.

Hımm, niye kodları o kadar uzatmışım ki anlamadım. Bu arada tablolarla ilgili şunu şöylemeliyim. Bir önceki mesajımdaki tablolarda dikkatinizi çektiyse her üç tablonun da sütun sayıları aynı ama satır sayıları farklıydı. Kodlar o senaryoya göre yazılmıştı. Sonra hem satır hem de sütun sayıları farklı olan tablolarda benzer bir işlemi nasıl yaparız diye düşündüm ve aşağıda paylaştığım kodlar oluştu.

Mesela a.xlsx dosyasındaki tabloda 5 tane satır, 7 tane de sütun olsun.
2018-09-19%2006-30-18%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

b.xlsx dosyasındaki tabloda 7 tane satır, 4 tane sütun olsun.
2018-09-19%2006-33-17%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

Bu iki tabloyu birleştirdiğimizde, 7 satır ve 7 sütundan oluşan bir c tablosu meydana gelir.
2018-09-19%2006-36-29%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

Kodlar:

#!/usr/bin/python3.6
# -*- coding: utf-8 -*-

import xlrd
import xlwt

dosya_adi_1 = "a.xlsx"
dosya_adi_2 = "b.xlsx"

dosya_oku_1 = xlrd.open_workbook(dosya_adi_1)
dosya_oku_2 = xlrd.open_workbook(dosya_adi_2)

sayfa_1 = dosya_oku_1.sheet_by_name("Çizelge1")
sayfa_2 = dosya_oku_2.sheet_by_name("Çizelge1")


def verileri_al(sayfa):
    veriler = []
    for satir in range(sayfa.nrows):
        for sutun in range(sayfa.ncols):
            veriler.append(([satir, sutun], sayfa.cell_value(satir, sutun)))
    return veriler


yeni_dosya = xlwt.Workbook()
yeni_sayfa = yeni_dosya.add_sheet("Çizelge1")

veri_1 = verileri_al(sayfa_1)
veri_2 = verileri_al(sayfa_2)

kontrol_listesi = []

for i in veri_1:
    for j in veri_2:
        if i[0] == j[0]:
            if i[1] != "" and j[1] != "":
                yeni_sayfa.write(*i[0], i[1] + j[1])
            elif i[1] != "" and j[1] == "":
                yeni_sayfa.write(*i[0], i[1])
            elif i[1] == "" and j[1] != "":
                yeni_sayfa.write(*j[0], j[1])
            if i[0] not in kontrol_listesi:
                kontrol_listesi.append(i[0])
            if j[0] not in kontrol_listesi:
                kontrol_listesi.append(j[0])


def eksik_hucreleri_ekle(veri_listesi):
    for veri in veri_listesi:
        if veri[0] not in kontrol_listesi:
            yeni_sayfa.write(*veri[0], veri[1])


eksik_hucreleri_ekle(veri_2)
eksik_hucreleri_ekle(veri_1)


yeni_dosya.save("c.xlsx")

Merhaba ilgi ve alakanız için çok teşekkür ederim şimdi ofis e geldim elime geçen dökümanın orjinal halini sizinle paylaşıyorum tamamen böyle bir veriler içeren bir dosyam oluyor sıralamalar farklı isimler farklı sütünlar farklı adetler farklı bu kadar farklılığın arasında kayboldum :slight_smile:

Sanırım hücrelerden aldığınız karakter dizilerini noktalardan önceki ve sonraki kısımlara ayırmanız gerek. Bunun için düzenli ifadeleri kullanabilirsiniz: https://www.tutorialspoint.com/python/python_reg_expressions.htm

vermiş olduğunuz link e hemen bakıyorum fakat onu çözümünden sonra noktaların sonunda oluşan sayıları toplama kısmı geliyor örnek verecek olursam S1 isimli elemanın karşısında 3 var diğer grupta da S1 elemanın karşısında 9 var bunların toplamı sonuç kısmına yazılması gerekecek ben direk olarak sonuc a gitmeye çalıştım o yüzden noktaları kale almadan sanki onlar " S1,3 " Ve " S1,9 " olduklarını düşünerek yola devam ettim

Siz kaale almasanız bile Python kaale alacaktır. “S1…3” gibi bir karakter dizisinin “S1” ve “1” ifadelerine dönüşmesi gerektiğini Python’a söylemelisiniz önce. Daha sonra bu ifadeler ile yapmak istediklerinizi yapabilirsiniz.

Anladım. Sizinle paylaştığım kodların yardımı dokunur diye tahmin ediyorum. Sizinle paylaştığım örnek uygulama ile sizin tablonuz üzerinde işlem yapacak olan uygulama aslında birbirine benzeyen uygulamalar. Tabi ki kodlarda biraz değişiklikler olacak. Mesela bir sütunu okurken, sütunlardaki WE, CS gibi harfler, size veri ayıklamada yardımcı olabilir. Düzenli bir şekilde sıralanmamış veriler. Örneğin içinde CS geçen hücre, GRUP A sütununda 2. satırda, GRUP B sütunundaysa 1. satırda. Bunları ayıklayabilirsiniz sanıyorum.

İsmail bey ;

sanırım yanlış anlaşıldım excell dökümanında bunları istediğim gibi sadeleştirebiliyorum hatta şöyle bir durum var excellde yapmak istediğim tüm programlamayı yaptım ama ben bunu birde python ile yapmaya çalışıyorum.bu yüzden bazı kısımları kale almadım.

Ben verdiğiniz tablodan yola çıkarak böyle bir yorumda bulundum. Eğer sadeleştirilmiş tablo üzerinde işlem yapacaksanız, haklısınız tabii.

@dildeolupbiten hocam çok teşekkür ederim emeğine sağlık verdiğiniz kodlar üzerinden yapmaya çalışacağım hem forumda hemde python kısmında daha yeni olduğum için size anlatımım da biraz karışmış olabilir kusura bakmayın.

Emeğinize Sağlık.

kaba taslak yapmak istediğimi ve yolunuda yaklaştım da işte sadece bir kaç yerde sıkıntılarım var en büyük sıkıntımda aynı isimde olan elemanları python ile buldurup karşısındaki değerler ile toplama kısmı o yüzden direk olarak konu ortadan girilmiş oldu bundan dolayıda yanlış anlaşılma oldu :slight_smile:

İlgi Alakanız için Teşekkürler.

1 Beğeni

Rica ederim, umarım koların faydası olur, yine de içinden çıkamadığınız bir durum oluşursa burada paylaşırsınız, elimizden geldiğince yardımcı olmaya çalışırız. İyi günler dilerim.

1 Beğeni