2016-10-19 1 views
0

Je travaille avec python 2 et j'ai lu plusieurs articles à propos de cette erreur i.e (this post). Cependant, je reçois toujours l'erreur. Ce que je fais est: Je lis les fichiers dans un répertoire, si l'un des fichiers contient une chaîne spécifique, je supprime le répertoire.python 2 [Erreur 32] Le processus ne peut pas accéder au fichier parce qu'il est utilisé par un autre processus

def select_poo(): 
path = os.walk('/paila_candonga/') 
texto = 'poo' 
extension = '.tex' 
for root, dirs, files in path: 
    for documento in files: 
     if extension in documento: 
      with open(os.path.join(root, documento), 'r') as fin: 
       for lines in fin: 
        if texto in lines: 
         shutil.rmtree(root) 
        else: 
         continue 

Puis-je obtenir l'erreur:

WindowsError: [Error 32] The process cannot access the file because it is being used by another process 

J'ai aussi essayé d'utiliser le chemin absolu:

def select_poo(): 
path = os.walk('/paila_candonga/') 
texto = 'poo' 
extension = '.tex' 
for root, dirs, files in path: 
    for documento in files: 
     if extension in documento: 
      with open(os.path.join(root, documento), 'r') as fin: 
       for lines in fin: 
        if texto in lines: 
         route = (os.path.join(root, documento)) 
         files = os.path.basename(route) 
         folder = os.path.dirname(route) 
         absolut= os.path.dirname(os.path.abspath(route)) 
         todo = os.path.join(absolut, files) 
         print todo 

        else: 
         continue 

Alors je vais obtenir:

C:\paila_candonga\la_Arepa.tex 
C:\paila_candonga\sejodio\laOlla.tex 
C:\paila_candonga\sejodio\laPaila.tex 

Si je supprimer un fichier à la fois, en utilisant le même chemin absolu d os.remove (''), je n'aurai pas de problèmes. Si j'essaie de supprimer tous les fichiers à la fois en utilisant select_poo() et shutil.rmtree (dossier) ou os.remove (absolut), je vais avoir l'erreur 32.

Y at-il un moyen que je peux faire une boucle à travers chaque des chemins à todo et les supprimer sans avoir l'erreur 32?

Merci,

Répondre

1

il arrive ici:

with open(os.path.join(root, documento), 'r') as fin: 

Alors vous avez votre fichier ouvert et verrouillé, c'est la raison pour laquelle vous ne pouvez pas supprimer ce dossier en utilisant:

shutil.rmtree(root) 

au sein cette déclaration, vous devez faire en dehors de with déclaration

+0

Merci Alex, mais il ne sera pas travail. L'erreur est toujours là = ( –

+0

@ Chüngel êtes-vous sûr que vous n'avez pas ce dossier ou un fichier de ce dossier ouvert dans une autre application? – Alex

+0

Alex, je suis assez nouveau avec Python mais si je supprime les fichiers en utilisant os .remove (absolut) les mêmes fichiers seront supprimés sans erreurs, donc je crois que l'erreur est causée par le processus suivi alors que je supprime tous les fichiers en même temps Comme vous l'avez suggéré, j'ai défini une variable x = [] alors si la chaîne est trouvée dans le document, le chemin sera ajouté à x, puis en dehors de l'instruction with, j'exécute os.remove (x [0]), mais je reçois exactement la même erreur. mon code basé sur votre idée? –