2017-09-14 1 views
0

Ce morceau de code est ma première tentative de création d'un programme. Je reçois une erreur lors de l'exécution qui lit:Comment puis-je obtenir chaque fichier d'une extension d'un répertoire à un autre? J'ai écrit un code mais je reçois une exception

PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\Users\gabri\Desktop\' -> 'C:\Users\gabri\Desktop\Planilhas Excel\'

Qu'est-ce que je fais mal? Le but de ce programme est d'obtenir tous les fichiers excel, puis pdf, puis word et de les mettre dans des dossiers créés par le programme.

import os 
from glob import glob 

# import cx_Freeze 
print("Digite o diretório de origem.") 
dirOrigem = input() 

os.chdir(dirOrigem) 

excel_files = glob('*.xlsx') 
excel_files.append(''.join(glob('*.xls'))) 

dirDestinoXL = dirOrigem + '\\' + 'Planilhas Excel' 
if not os.path.exists(dirDestinoXL): 
    os.makedirs(dirDestinoXL) 

for i in excel_files: 
    os.rename(f'{dirOrigem}\\{"".join(i)}', f'{dirDestinoXL}\\{"".join(i)}') 

os.chdir(dirOrigem) 

pdf_files = glob('*.pdf') 

dirDestinoPDF = dirOrigem + '\\' + 'PDF' 
if not os.path.exists(dirDestinoPDF): 
    os.makedirs(dirDestinoPDF) 

for p in pdf_files: 
    os.rename(f'{dirOrigem}\\{"".join(p)}', f'{dirDestinoPDF}\\{"".join(p)}') 


os.chdir(dirOrigem) 

word_files = glob('*.doc') 
word_files.append(glob('*.docx')) 

dirDestinoWord = dirOrigem + '\\' + 'Word' 
if not os.path.exists(dirDestinoWord): 
    os.makedirs(dirDestinoWord) 

for d in word_files: 
    os.rename(f'{dirOrigem}\\{"".join(d)}', f'{dirDestinoWord}\\{"".join(d)}') 
+0

si l'un de ces fichiers est ouvert dans un autre processus, fermez-les et réessayez. – Antimony

+0

'excel_files = glob ('* .xlsx') excel_files.append (''. Join (glob ('* .xls'))) ' Les fichiers excel contiennent-ils les fichiers excel corrects comme prévu? Peut-être être une liste vide. – deaspo

+0

Supprimez ceci: excel_files.append (''. Join (glob ('*. Xls'))) et cela fonctionne très bien. Vous ajoutez une section vide pour que votre liste ressemble à [''], alors votre boucle for essaye de modifier '' ce qu'elle ne peut pas faire. –

Répondre

1

J'ai essayé votre programme et il ne fonctionne pas comme il est sur mon ordinateur. J'ai changé certaines lignes et ça marche. Espérons que cela aide

import os 
from glob import glob 

dirOrigem = r'C:\Users\fchal\Desktop\temp' # here I changed the code just because I didn't want to bother using input() 
os.chdir(dirOrigem) 

excel_files = glob('*.xlsx') 
excel_files.extend(glob('*.xls')) 


dirDestinoXL = dirOrigem + '\\' + 'xlsfile' 
if not os.path.exists(dirDestinoXL): 
    os.makedirs(dirDestinoXL) 

for i in excel_files: 
    os.rename(i, os.path.join(dirDestinoXL, i)) 


# same procedure for pdf and word files 
+0

Cela semble intéressant. Je mets l'entrée parce que je ne vais pas courir cela sur mon pc et j'ai besoin du bon répertoire sur son pc. Mais je suppose que je vais juste obtenir le répertoire de son PC. –

0

Je sais que glob peut être un désordre parfois. Et si les fichiers sont ouverts, vous pouvez obtenir des erreurs. Voici ce que je ferais:

import os 

def move_files_with_extension(from_dir, to_dir, *extensions): 
    if not os.path.isdir(from_dir): 
     raise ValueError('{} is not a real directory'.format(from_dir)) 
    elif not os.path.isdir(to_dir): 
     raise ValueError('{} is not a real directory'.format(to_dir)) 

    files_with_extensions = all_files_with_extensions_in(from_dir, *extensions) 

    for file_path in files_with_extensions: 
     os.rename(file_path, os.path.join(to_dir, os.path.basename(file_path))) 

def all_files_with_extensions_in(dir, *extensions): 
    files_with_extensions = list() 

    for dir_path, dir_names, file_names in os.walk(dir): 
     for file_name in file_names: 
      if file_name.endswith(extensions): 
       files_with_extensions.append(os.path.join(dir_path, file_name)) 

    return files_with_extensions 

et vous pouvez faire:

dirOrigem = input() 

excel_location = os.path.join(dirOrigem, 'Planilhas Excel') 

move_files_with_extension(dirOrigem, excel_location, '.xls', '.xlsx') 

et ainsi de suite

+0

Ceci est une telle beauté. Je n'arrive toujours pas à comprendre comment tout cela fonctionne. C'est ce qu'on appelle le bon code et le mien est ce que les gens appellent un mauvais code? Pas de problème à dire, c'est mon premier programme. –

+0

Lol! Je n'appellerais pas votre code mauvais, ni mon code bon. Juste des solutions différentes au même problème. –