2017-03-22 2 views
1

Je cherche à écrire un script en Python, ce qui m'aide à trier le nom de fichier de base et à créer un dictionnaire pour le nom s'il n'existe pas.Le tri du fichier basé sur le nom du fichier correspond au dossier Python

Par exemple: J'ai 4 fichier dans un dossier nommé Unsorted

111 iam.txt

111 how.txt

110 uare.txt

110- uok.txt

Je veux créer un nom de dossier 111 pour conserver tous les noms de fichier 111-xxx.txt et nom de dossier 110 pour conserver tous les noms de fichier 110-xxx.txt

Je veux vérifier si le dossier déjà là déplace le fichier dans ce dossier, sinon créer un nouveau dossier.

Cela a fonctionné pour la première exécution, mais si j'ai un nouveau fichier dans le nom de dossier non trié a commencé avec 111 ou 110, il montre des erreurs. L'erreur est os.mkdir (chemin_fichier) FileExistsError: [Errno 17] Le fichier existe: '/ home/pi/Desktop/Sorted/111' Voici mon code.

Merci les gars à l'avance

import os 
import shutil 

srcpath = "/home/pi/Desktop/Unsorted" 
srcfiles = os.listdir(srcpath) 

destpath = "/home/pi/Desktop/Sorted" 

# extract the ten letters from filenames and filter out duplicates 
destdirs = list(set([filename[0:2] for filename in srcfiles])) 


def create(dirname, destpath): 
    full_path = os.path.join(destpath, dirname) 
    os.mkdir(full_path) 
    return full_path 

def move(filename, dirpath):shutil.move(os.path.join(srcpath, filename),dirpath) 

# create destination directories and store their names along with full paths 
targets = [(folder, create(folder, destpath)) for folder in destdirs] 

for dirname, full_path in targets: 
    for filename in srcfiles: 
     if dirname == filename[0:2]: 
      move(filename, full_path) 
+1

_il montre les erreurs_ - quelles erreurs at-il montré? Ne nous fais pas deviner! Cela peut être quelque chose que nous pouvons résoudre en un tournemain sans exécuter le script. Rendez-le facile pour nous de répondre. – tdelaney

+0

Désolé pour les informations manquantes. L'erreur est os.mkdir (full_path) FileExistsError: [Errno 17] Le fichier existe: '/ home/pi/Desktop/Sorted/111' – zuzu

Répondre

0

os.path.isdir(path) sera:

Return True if path is an existing directory.

vous pouvez donc changer votre méthode de création de répertoire à:

import os.path 
... 
def create(dirname, destpath): 
    full_path = os.path.join(destpath, dirname) 
    if os.path.isdir(full_path): 
     os.mkdir(full_path) 
    return full_path 

Alternativement, ask forgiveness not permission:

def create(dirname, destpath): 
    full_path = os.path.join(destpath, dirname) 
    try: 
     os.mkdir(full_path) 
    except FileExistsError: 
     pass 
    return full_path 
+0

Merci pour votre aide. Ça fonctionne maintenant! – zuzu