Dosya İsmindeki Tarihe Göre O Klasöre Taşıma

Merhaba,

2021-01-09_07-57-00_UTC.jpg
2021-01-11_14-30-07_UTC.mp4 Bu formatta oluşan dosyaları her birinin tarihine uygun klasöre yerleştirmek istiyorum.

Klasördeki dosya isimlerinden tarihleri çekip yeni tarih klasörleri oluşturdum. Ama örneğin 2021-01-09_07-57-00_UTC.jpg dosyasının nasıl 2021-01-09 klasörüne taşınacağını yapamadım. Yardımcı olabilir misiniz? Aşağıda kodları bırakıyorum.

     import os
     import shutil

 
     def make_directory():
        
         date = []
         for i in files:
             a= i.split('_')[0]
             date.append(a)
             
         new = []
         new = list(set(date)) #tekrar eden değerleri kaldırdık
         for i in new :
             fileName = i.startswith('2021')
             if fileName == True :       
                 dirName = (directory_path + '/' + i)                 
                 if i not in os.listdir(directory_path):
                     os.mkdir(dirName)
 
     if __name__ == '__main__':
         directory_path = os.getcwd()    
         files = os.listdir(directory_path)
        
     make_directory()
1 Beğeni

Merhaba, elinize sağlık ilk aşamayı yapmışsınız; sorduğunuz kısım için belki şunun yardımı olur

# halihazırda içinde bulunduğumuz dizini geziyoruz..
for file_name in os.listdir():

    # eğer `file_name` bir klasöre değil de dosyaya tekabül ediyorsa..
    if klasor_degil_de_dosya_mi(file_name):

        # Yıl-Ay-Gün kısmını elde edelim (sizin koddan yürüttüm burayı)..
        tarih = file_name.split("_")[0]

        # şimdi ilgili klasöre taşıyalım..
        shutil.bunu_suraya_tasi(bu, sura)

1 Beğeni

Cevabınız için teşekkür ederim

Yapmak istediğim aşamaları yaptım bitmiş halini paylaşıyorum. Böyle bir şeye ihtiyacı olanlar için yol gösterici olabilir. Daha da iyileştirilebilir tabi ki. Enumerate ve set özelliğini öğrenmiş oldum :slight_smile:

import os
import shutil

def organize():
    
    directory_path = os.getcwd()    
    files = os.listdir(directory_path)
        
    date = []
    for i in files:
        a= i.split('_')[0]
        date.append(a)
        
        
    dirPaths = list()  #Klasörlerin pathleri tutuluyor
    new = list(set(date)) #tekrar eden değerleri kaldırdık
    for i in new :
        fileName = i.startswith('2021') 
        
        if fileName == True :       
            dirName = (directory_path + '/' + i)
                    
            if i not in os.listdir(directory_path): #Eğer dizinde o klasör yoksa oluşturur
                os.mkdir(dirName)        
            dirPaths.append(dirName)          

    #dosya isimlerini aldık
    fileNames = [] #Dosya isimlerini tutuyor
    for i in files:
        a= i.split('_')[0]
        a = a.startswith('2021')
        b = os.path.isfile(directory_path + '\\' + i)
        if a == True and b == True:             
            fileNames.append(i)   

        
    file_paths = [] #Dosya pathleri tutuyor
    for i in files:
        if i.startswith("2021") and i.endswith('.jpg'):           
            a= os.path.join(directory_path, i) 
            file_paths.append(a)
        if i.startswith("2021") and i.endswith('.mp4'):
            b= os.path.join(directory_path, i)
            file_paths.append(b) 
    bare = []             
    extensions =('.jpg','.mp4')
    for j in file_paths:
        if j.endswith(extensions):        
            j =j.split("\\")[6] #C:\Users\userName\folderName\folderName2\folderName3 eğer klasör sayısı az ise 6 yerine 5,4 filan verilebilir  
            j =j.split("_")[0]
            bare.append(j)     

    try:
        for sıra, eleman in enumerate(bare, 0):        
            if eleman == eleman:
                index = "{}".format(sıra)
                index = int(index)
                dest = directory_path + "\\{}".format(eleman) + "\\" + fileNames[sıra]
                src = file_paths[index]
                shutil.move(src, dest) 
    except:
        pass
    
if __name__ == "__main__":

    organize()
1 Beğeni