2011-12-08 17 views
5

Ho un problema specifico in python. Di seguito è la mia struttura delle cartelle.Spostare il contenuto della cartella figlio nella cartella padre in python

dstfolder/slave1/slave

voglio il contenuto della cartella 'slave' da spostare a "SLAVE1" (cartella principale). Una volta spostato, la cartella 'slave' deve essere cancellata. shutil.move sembra non essere d'aiuto.

Per favore fatemi sapere come si fa?

+0

Cosa hai provato? 'shutil.move (src, dst)' la documentazione dice "Spostare ricorsivamente un file o una directory (src) in un'altra posizione (dst)", quindi dovrebbe funzionare. – jcollado

risposta

9

Esempio utilizzando i moduli os e shutil:

from os.path import join 
from os import listdir, rmdir 
from shutil import move 

root = 'dstfolder/slave1' 
for filename in listdir(join(root, 'slave')): 
    move(join(root, 'slave', filename), join(root, filename)) 
rmdir(root) 
+0

Grazie a te, piccoli cambiamenti e ha funzionato !!! Spiacente non posso votare come la mia reputazione è molto bassa :-( –

+0

Non puoi andare avanti, ma puoi convalidare la risposta :) – tito

+0

Inoltre puoi spostare il contenuto della cartella principale in una nuova cartella figlio usando, Diciamo che è necessario sposta dir1/* in dir1/dir2. Quindi puoi fare, 'shutil.move (" dir1 "," dir2) ' ' shutil.move ("dir2", oa.path.join ("dir1", "dir2") ' –

-2

Forse si potrebbe entrare in schiavo dizionario, e poi

exec system('mv .........') 

che funzionerà no?

+0

Questa risposta è specifica per i sistemi operativi POSIX e renderà il codice meno portabile. – jhrf

0

Il problema potrebbe essere con il percorso specificato nella funzione shutil.move

Prova questo codice

import os 
import shutil 
for r,d,f in os.walk("slave1"): 
    for files in f: 
     filepath = os.path.join(os.getcwd(),"slave1","slave", files) 
     destpath = os.path.join(os.getcwd(),"slave1") 
     shutil.copy(filepath,destpath) 

shutil.rmtree(os.path.join(os.getcwd(),"slave1","slave")) 

Incollarlo in un file .py nella dstfolder. Cioè slave1 e questo file dovrebbe rimanere affiancato. e poi eseguirlo. ha funzionato per me

+0

Controlla anche se hai le autorizzazioni richieste pure – Pulimon

0

Avevo bisogno di qualcosa di un po 'più generico, ovvero spostare tutti i file da tutte le [sotto] + cartelle nella cartella principale.

Per esempio iniziare con:

root_folder 
|----test1.txt 
|----1 
    |----test2.txt 
    |----2 
      |----test3.txt 

e finire con:

root_folder 
|----test1.txt 
|----test2.txt 
|----test3.txt 

Una funzione ricorsiva rapido fa il trucco:

import os, shutil, sys 

def move_to_root_folder(root_path, cur_path): 
    for filename in os.listdir(cur_path): 
     if os.path.isfile(os.path.join(cur_path, filename)): 
      shutil.move(os.path.join(cur_path, filename), os.path.join(root_path, filename)) 
     elif os.path.isdir(os.path.join(cur_path, filename)): 
      move_to_root_folder(root_path, os.path.join(cur_path, filename)) 
     else: 
      sys.exit("Should never reach here.") 
    # remove empty folders 
    if cur_path != root_path: 
     os.rmdir(cur_path) 

Di solito chiamarla con il stesso argomento per root_path e cur_path, ad es. move_to_root_folder(os.getcwd(),os.getcwd()) se vuoi provarlo nell'ambiente python.

Problemi correlati