N-PN White-Hat Project
[Python] Script de rangement - Version imprimable

+- N-PN White-Hat Project (https://dev.n-pn.fr/forum)
+-- Forum : Programmation (https://dev.n-pn.fr/forum/forumdisplay.php?fid=72)
+--- Forum : Langages interprétés (https://dev.n-pn.fr/forum/forumdisplay.php?fid=27)
+--- Sujet : [Python] Script de rangement (/showthread.php?tid=3163)



[Python] Script de rangement - Bourbon Kid - 04-07-2013

Plop tout le monde,
Voici un petit script que j'ai réalisé pour commencer à apprendre le python. Il permet de ranger des fichiers dans d'autres répertoires en fonction de leur nom ou de leur format.
Je m'en sert pour trier mon répertoire Download et mes séries.
C'est mon tout premier script python et il très basique mais j'ai pensé que ça pouvait servir !

Trêve de blablateries et place au code :

Code :
#!/usr/bin/python3.3

import os
import re
import shutil

def checkName(realname, filename): return all(re.search(t, filename) for t in realname.lower().split())
def checkFormat(name,format): return any(re.search(t,name) for t in format)

#Go to the right directory
os.chdir("/media/slayne/OS_Install/Users/David/Downloads") #replace by your directory
#Get all the files
allfiles=os.listdir(os.getcwd())

#video formats
videos=["mp4","avi","mkv"] #replace
#archive formats
archives=["zip","rar"] #replace

#path for unsorted videos
video_path="/media/slayne/OS_Install/Users/David/Downloads/videos to sort" #replace

#path for unsorted archives
archive_path="/media/slayne/OS_Install/Users/David/Downloads/archives to sort" #replace

#List all the series and their associeted path, replace by yours
series={"vikings":"/media/slayne/Data/series/Vikings",
        "dexter":"/media/slayne/OS_Install/Users/David/Videos/DEXTER",
        "misfits":"/media/slayne/Data/series/misfits",
        "breaking bad":"/media/slayne/OS_Install/Users/David/Videos/Breaking Bad",
        "how i met your mother":"/media/slayne/OS_Install/Users/David/Videos/HYMYM",
        "sons of anarchy":"/media/slayne/OS_Install/Users/David/Videos/SOA",
        "the walking dead":"/media/slayne/OS_Install/Users/David/Videos/The Waling dead",
        "game of thrones":"/media/slayne/Data/series/GOT",
        "homeland":"/media/slayne/Data/series/Homeland",
        "true blood":"/media/slayne/Data/series/true blood",
        "sherlock":"/media/slayne/Data/series/Sherlock"}
        
#Normalize files
for name in allfiles:
    name=name.lower()
    
#sort series
for k in series:
    for f in allfiles:
        if checkName(k,f):
            print("moving",f)
            shutil.move(f,series[k])
            
        #sort other videos
        if checkFormat(f,videos):
            print("moving",f)
            shutil.move(f,video_path)

        #sort archives
        if checkFormat(f,archives):
            print("moving",f)
            shutil.move(f,archive_path)


Si vous avez des remarques n'hésitez pas je suis là pour ça !

ps: merci à MacYavel pour avoir réduit ma fonction de 20 lignes en 1 seule Big Grin
ps2: pas testé sous windows


Équivalent bash - Edelwin - 04-07-2013

Code :
#!/bin/bash
pwd # on affiche le répertoire courant

## On utilise sed pour lister tous les fichiers présent, et les renommer avec leur
## extension en lowercase
ls | sed -n 's/\([^.]*\)\.\(.*\)/mv -v "\1.\2" "\1.\L\2"/p' | bash -s &&
######## Ce script marche aussi ########
# find . -name '*.*' -exec sh -c '                  
#  a=$(echo {} | sed -r "s/([^.]*)\$/\L\1/");
# [ "$a" != "{}" ] && mv "{}" "$a" ' \;        
#########################################
##### Je présume et assume que les #######
#           dossiers de contenu existent.            
# Sinon, créez-les. je n'ai pas fait de test pour  
#              pas alourdir le script                    
################################
mv *.[flac,mp3,ogg,aac,wma] Musique/
mv *.[avi,mov,wmv,mk] Vidéos/
mv *.[rar,zip,tar.gz,tar.bz2,tar] Archives/
mv *.[png,jpg,jpeg,bmp] Photos/
mv *.[odt,abw,ps,doc,pdf,rtf,txt,sxw,kwd] Documents/

exit 0
Enjoy your shell :3
ps : merci à stackoverflow
pps : merci à Bourbon Kid pour m'avoir donner l'idée de retranscrire son script ;)