Döngüsel dosya ismi değişikliği

Arkadaşlar merhaba chrome headless mode ile çalışıyorum.

Şöyle bir kod ile uğraşıyorum pek halledebildiğim söylenemez. Şöyle anlatayım. 10 döneme ait indirdiğim dosyalar hep mali tablo başlığı altında iniyor. Ben ise ilk indirilen dosya ismi mali tablo olarak kalsın sonrası mali tablo (1) ,mali tablo (2) , 3,4,5 … şeklinde devam etmesini istiyorum. kodları şöyle yazdım…Desteğiniz için şimdiden teşekkürler…

dosya="C:/Users/isaak/Desktop/TemelAnalizProgrami/temp/"
            count=1
            isim=os.listdir(dosya)
            source=dosya +"malitablo.xlsx"
            destination=dosya+"malitablo"+str(count)+".xlsx"
            os.rename(source,destination)
            count+=1
            time.sleep(1)    

source kısmı malitablo iken
destination kısmı mali tablo 1

source kısmı mali tablo 1 iken
destination kısmı mali tablo 2 olacak şekilde yapmak istiyorum.

kod for döngüsü içinde çalışıyor… Teşekkürler

Yaptığınız For döngüsünden bağımsız olarak aşağıdaki kodu birşekilde anlayıp kendinize uyarlarsanız ya da bunu kullanıp üzerine eklemeler yaparsanız bu size kalmış bir durum.

Kod
import os
import shutil
import tkinter as tk


def dosya_oluştur():
    with open("malitablo.xlsx","w") as dosya:
        pass

count = 0
def dosya_kontrolü():
    global count
    if not os.path.exists("malitablo.xlsx"): # belirli yoldaki şu dosya yok ise
        dosya_oluştur() 

    else: # beliri dosya şu yolda var ise
        print("zaten var")
        count += 1
        shutil.copy2("malitablo.xlsx", f"malitablo({count}).xlsx") # o dizine isim değiştirerek kopyala

def arayüz():
    pencere = tk.Tk()
    tk.Button(text="Tıkla",command = dosya_kontrolü).pack()
    pencere.mainloop()

arayüz()
SS

Ekran görüntüsü 2022-03-27 194809

Bir arayüz ya da bir sonsuz döngü oluşturup içerisinde sorgular olmak şartı ile kaldığı yerden aynı dosyayı kopyalama nasıl yapılır bilmiyorum.

Bu fikirler dışında her run edişte bir defa çalışıyor ve bir defa çalıştığı içinde birkez aynı dosyayı kopyalıyor. Yani "malitablo.xlsx" varken çalıştırıldığında "malitablo(1).xlsx" olarak kopyalanıyor. Kopyalandıktan sonra tekrar çalıştırıldığında "malitablo(1).xlsx" kalmaya devam ediyor. Çünkü sayacın bir değeri herhangi bir yerde tutulmuyor. Onu tutmak için ".ini dosyası" veya "metin belgesi" kullanılabilir.

1 Beğeni

Teşekkürler hocam inceliyorum…

Birebir kod üzerinde örneklemedim.

python - Create file but if name exists add number - Stack Overflow

Böyle bir çözüm var.

Ben olsa dosya varsa, bir artır, o da varsa bir artır o da var yine bir artır şeklinde bir kontrolle çözebilirim gibi geldi.

Mevcut bir dosya varsa bir üstüne bakıp yoksa oluşturmak kadar kolay göründü gözüme.

1 Beğeni

Teşekkür ederim. pc başına geçmedim ama sanırım burada çözüm var gibi. Uyguladığımda sonucu paylaşırım. Tekrar teşekkür ederim. Sağlıcakla kalın…

Arkadaşlar tekrardan merhaba. Denediğim tüm çözümler etkisiz kaldı. Başka fikri olan varmı teşekkürler…

Aspirin değil ki etkisiz kalsın, ne yaptın da olmadı ki?

Şimdi üşenmedim bir klasör oluşturup prensipsel bir kod yazdım gayet de güzel çalıştı.

import os

source = "c:\\Deneme\\Deneme.txt"
filepath = "c:\\Deneme\\"
count = 0

generic_filename = filepath +"malitablo.xlsx"

file_is_exists = os.path.exists(generic_filename) 

while True:

    if file_is_exists:
        count = count+1
        generic_filename = filepath + "malitablo " + "(" + str(count) + ")" + ".xlsx"
        file_is_exists = os.path.exists(generic_filename) 
    else:
        count = 0
        os.rename( source, generic_filename)
        break


Yalnız mutlaka her seferinde bir Adet deneme dosyası klasörde olacak, senin kodundan değiştirdim, rename ile isim değiştirdiğin için ilk dosya yok oluyor. Yani her eklemek istediğinde içeride bir tane daha deneme txt dosyası koyman gerekiyor.

Çok da basit.

Aynen söylediğim gibi,
Dosya varmı diye bak varsa sayacı artır.
Artan sayaca göre yeni ismi oluştur.

İsim varmı diye klasöre bak.

Yoksa deneme.txt dosyanı rename ile son kontrol ettiğin isme yazdır.

Kodu daha da basitleştirirdim ama anlaşılabilsin diye gereksiz değişkenler falan da tanımladım ki, kendi koduna göre path leri vs aktarırken kolaylık olsun diye.

Bu sefer de çalıştıramazsan. Ne gibi bir etkisizlik yaşadığına dair hata kodlarını da verirsen sevinirim.

2 Beğeni

Yani sana ilk verdiğim linkte.

19

I ended up writing my own simple function for this. Primitive, but gets the job done:

def uniquify(path):
    filename, extension = os.path.splitext(path)
    counter = 1

    while os.path.exists(path):
        path = filename + " (" + str(counter) + ")" + extension
        counter += 1

Yani bu link ile tek koşul karşılaştırması ile de çözebilirsin.

python - Create file but if name exists add number - Stack Overflow

Sırf kodun işleyişini anlayabilesin diye kodu daha da parçalamış oldum.

While döngüsü dosya olduğu sürece tekrarlansın şeklinde tasarlamış.

Ve çok şık.

Ama sırf koşul karşılaşmaları anlaşılsın diye sonsuz while döngüsüne koydum.

Koşulları if içine belirginleştirdim.

Adamın tasarımı mükemmel ben olsam benim kod yerine örnektekini kullanırdım.

2 Beğeni

İlginiz için çok teşekkür ederim hocam. Daha önceki gönderdiğiniz linkteki kodların hemen hemen hepsini denedim. Sizin gönderdiğiniz kodu da deneyeceğim. Sorun şu aslında. For döngüsü içinde çalışacak bu kod. Yeni döngüye geçmeden döngünün sonunda dosya indiriliyor. İndirilen dosya mali tablo olarak iniyor ben ismini değiştiriyorum. Yeni döngüde bir daha mali tablo olarak iniyor onunda ismini değiştiriyorum. Sonraki döngülerde ise bir türlü değiştiremedim isimleri. Varolan bir dosya ismi değiştirilemez diyor Uyarı olarak. Yani ben mantığı tam kuramadım anlayacağınız hocam isterseniz kodun tamamını paylaşabilirim. Saygılar…

O zaman şuna dikkat etmeniz gerekecek. Varolan dosyanın ismi değiştirilemez diyor. Bu dosyanın ismi değiştirilebilir. Ya yetkili kullanıcı değil, yada dosya açık.

Kodu basitleştirebildiğim kadar basitleştirdim.

Okunması açısından yoksa iki satırlık kod.

İlk indirdiğiniz dosyayı, deneme.txt dostası varsayın. Sonrasında zaten ekledikçe ismini değiştirip alacaktır. Siz her seferinde deneme.txt dosyası olarak indirilmiş gibi düşünün. Tabi bu isim tercihe bağlı ne isterseniz o yapın.

Bu halilye istediğim kadar kodu çalıştırdım, her seferinde bir artırarak dosyayı oluşturdu.

Hiç bir sorun görmedim.

Bununla da sorun yaşarsanız. Dosya yetkilerinizi ve dosyanın kapalı olduğuna emin olun. Açık bir dosyanın adını os.rename ile değiştiremezsiniz.

Hocam çalıştı bu kod. Ne kadar teşekkür etsem azdır. Mantık olarak bir türlü yerleştiremiyordum. Bunda takılı kalınca sıradaki işleri de devam ettirmek gelmiyordu içimden.

Tekrardan teşekkür eder hayırlı ramazanlar dilerim. Sağlıcakla…

1 Beğeni

Rica ederim. Maalesef kod yazmadan çözülsün istiyorum olmuyor. Ben test etmediğim kodu yazıp koymam.

Ama her kod koyduğumda denemek için zaman kaybediyorum. Bana da anlayış gösterin. Balık tutabilin istiyorum. Balık vermeye yetişemem çok kişinin ihtiyacı var.

Ama işiniz çözüldüyse sevindim. Sırada bir çok katılımcı var özelden fırça yiyorum. Bonusu size kullandım. Artık diğerlerinden şimdilik özür diliyorum.

Sizlere de hayırlı ramazanlar.

2 Beğeni

Gerçekten çok teşekkür ederim. İnanın bende kodu kendim oluşturmak için çok uğraştım. Mantığı yakalayamayınca kaldım öyle mecburen yardım istemek zorunda kaldım. Hakkınızı helal edin. Şu ana kadar yaklaşık 600 satırlık kod yazdığım bir projem var. Hevesle öğrenmeye anlamaya devam ediyorum. Sizler gibi değerli kişilerin desteği ilaç gibi geliyor.

Sizi meşgul etmiyim tekrardan teşekkürler sağlıcakla kalın…

2 Beğeni