Problemy z aktywacją konta
Jeśli po zarejestrowaniu się na forum nie otrzymałeś emaila z linkiem do potwierdzenia rejestracji konta skontaktuj się ze mną wysyłając email za pomocą formularza kontaktowego.

[Python] Sortowanie plików.

Rozmowy na prawie każdy temat
Awatar użytkownika
AnimaVillis
Początkujący
Początkujący
Posty: 5
Rejestracja: pt 18 lut 2022, 22:47
Podziękowano : 1 raz
Kontakt:

#1 [Python] Sortowanie plików.

Nieprzeczytany post autor: AnimaVillis »

Witam,

Postanowiłem, że może tutaj ktoś podpowie o bardziej sensownym rozwiązaniu.
Mam sobie skrypt o taki:

Kod: Zaznacz cały

import os
import time
import shutil
import datetime
import glob
from shutil import copytree, ignore_patterns
from shutil import copytree, Error


class ZmianaMiesiaca:
    def switch(self, full_month_name):
        default = "Błedny miesiąc"
        return getattr(self, 'case_' + str(full_month_name), lambda: default)()
 
    def case_01(self):
        return str("Styczeń")
 
    def case_02(self):
        return str("Luty")
 
    def case_03(self):
        return str("Marzec")
 
    def case_04(self):
        return str("Kwiecień")
 
    def case_05(self):
        return str("Maj")
 
    def case_06(self):
        return str("Czerwiec")

    def case_07(self):
        return str("Lipiec")

    def case_08(self):
        return str("Sierpień")
        
    def case_09(self):
        return str("Wrzesień")
        
    def case_10(self):
        return str("Październik")
        
    def case_11(self):
        return str("Listopad")
        
    def case_12(self):
        return str("Grudzień")

ZM = ZmianaMiesiaca()
os.chdir(r"E:\\")
all_files = list(os.listdir())
outputs = os.getcwd()
for files in all_files:
    try:
        inputs = glob.glob(files+"\\*")
        for ele in inputs:
            shutil.move(ele, outputs)
        shutil.rmtree(files)
    except:
        pass

for files in os.listdir('.'):
    time_format = time.gmtime(os.path.getmtime(files))
    datetime_object = datetime.datetime.strptime(str(time_format.tm_mon), "%m")
    full_month_name = datetime_object.strftime(
        "%m")
    dir_name = str(time_format.tm_year) + '-' + \
        ZM.switch(full_month_name)
    if not os.path.isdir(dir_name):
        os.mkdir(dir_name)
    dest = dir_name
    
    try:
        shutil.move(files, dest)
    except IOError:
        print("Brak możliwości skopiowania pliku.")

print("Posortowane...")
Jednakże zastanawiam się czy nie dałoby się jakoś uprościć samej zmiany nazwy miesiąca?
[CENTER]Obrazek[/CENTER]
Awatar użytkownika
matrix72001
Udziela się
Udziela się
Posty: 51
Rejestracja: wt 27 lip 2021, 16:26
Rozwiązany: 3
Lokalizacja: Konstantynopol
Podziękował: 2 razy
Podziękowano : 7 razy
Kontakt:

#2 Re: [Python] Sortowanie plików.

Nieprzeczytany post autor: matrix72001 »

Wciąż aktualne? Owszem można to uprościć... Zamiast używać klasy z wieloma metodami, można skorzystać z wbudowanej funkcji strftime w Pythonie, która zwraca nazwę miesiąca w danym języku. Poniższy kod zwróci nazwę miesiąca w języku systemowym, więc jeśli Twój system operacyjny jest ustawiony na język polski, zwróci polskie nazwy miesięcy.

Kod: Zaznacz cały


import os
import time
import shutil
import datetime
import glob
from shutil import copytree, ignore_patterns
from shutil import copytree, Error

os.chdir(r"E:\\")
all_files = list(os.listdir())
outputs = os.getcwd()
for files in all_files:
    try:
        inputs = glob.glob(files+"\\*")
        for ele in inputs:
            shutil.move(ele, outputs)
        shutil.rmtree(files)
    except:
        pass

for files in os.listdir('.'):
    time_format = time.gmtime(os.path.getmtime(files))
    datetime_object = datetime.datetime.strptime(str(time_format.tm_mon), "%m")
    full_month_name = datetime_object.strftime("%B")  # Zwraca pełną nazwę miesiąca w języku systemowym- polskim
    dir_name = str(time_format.tm_year) + '-' + full_month_name
    if not os.path.isdir(dir_name):
        os.mkdir(dir_name)
    dest = dir_name
    
    try:
        shutil.move(files, dest)
    except IOError:
        print("Brak możliwości skopiowania pliku.")

print("Posortowane...")

Lub ewentualnie metodą locale, bez względu na to z jakiej wersji językowej korzystasz:

Kod: Zaznacz cały

import os
import time
import shutil
import datetime
import glob
import locale
from shutil import copytree, ignore_patterns
from shutil import copytree, Error

# Ustawienie języka na polski
locale.setlocale(locale.LC_TIME, "pl_PL")

os.chdir(r"E:\\")
all_files = list(os.listdir())
outputs = os.getcwd()
for files in all_files:
    try:
        inputs = glob.glob(files+"\\*")
        for ele in inputs:
            shutil.move(ele, outputs)
        shutil.rmtree(files)
    except:
        pass

for files in os.listdir('.'):
    time_format = time.gmtime(os.path.getmtime(files))
    datetime_object = datetime.datetime.strptime(str(time_format.tm_mon), "%m")
    full_month_name = datetime_object.strftime("%B")  # Zwraca pełną nazwę miesiąca w języku polskim- niezależnie od systemu
    dir_name = str(time_format.tm_year) + '-' + full_month_name
    if not os.path.isdir(dir_name):
        os.mkdir(dir_name)
    dest = dir_name
    
    try:
        shutil.move(files, dest)
    except IOError:
        print("Brak możliwości skopiowania pliku.")

print("Posortowane...")
ODPOWIEDZ

Utwórz konto lub zaloguj się, aby dołączyć do dyskusji

Musisz być zalogowany, aby opublikować odpowiedź

Utwórz konto

Nie masz konta? Zarejestruj się, aby dołączyć do naszej społeczności
Mając konto moesz zakładać własne tematy i subskrybować interesujące cię wątki
To nic nie kosztuje i zajmuje tylko minutę

Zarejestruj się

Zaloguj się