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…
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
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.
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.
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.
İ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…
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.
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…