2011-12-08 19 views
5

Tengo un problema específico en python. A continuación está mi estructura de carpetas.Mover el contenido de la carpeta secundaria a la carpeta principal en python

dstfolder/esclavo1/esclavo

Quiero que el contenido de la carpeta 'esclavo' para mover a "esclavo1" (carpeta principal). Una vez movida, la carpeta 'esclava' debe ser eliminada. shutil.move parece no estar ayudando.

Hágame saber cómo hacerlo?

+0

¿Qué has probado? La documentación 'shutil.move (src, dst)' dice "Moviendo recursivamente un archivo o directorio (src) a otra ubicación (dst)", por lo que debería funcionar. – jcollado

Respuesta

9

Ejemplo usando los módulos os y 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

Gracias tito, cambios menores y funcionó !!! Lo sentimos, no se puede votar ya que mi reputación es muy baja :-( –

+0

No se puede votar, pero se puede validar la respuesta :) – tito

+0

También puede mover el contenido de la carpeta principal a una nueva carpeta secundaria usando, Digamos que necesita mover dir1/* a dir1/dir2. Entonces puede hacer, 'shutil.move (" dir1 "," dir2) ' ' shutil.move ("dir2", oa.path.join ("dir1", "dir2") ' –

-2

tal vez usted podría entrar en el esclavo diccionario, y luego

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

va a trabajar no es así?

+0

Esta respuesta es específica de los sistemas operativos POSIX y hará que el código sea menos portátil. – jhrf

0

El problema puede estar en el camino que ha especificado en la función shutil.move

Prueba este código

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")) 

Pégala en un archivo .py en la carpeta dst. Es decir. slave1 y este archivo deben permanecer uno al lado del otro. y luego ejecutarlo. funcionó para mí

+0

También compruebe si tiene los permisos requeridos también – Pulimon

0

Necesitaba algo un poco más genérico, es decir, mover todos los archivos de todas las carpetas [sub] + a la carpeta raíz.

Por ejemplo comenzar con:

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

y terminar con:

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

Una función recursiva rápida hace el truco:

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) 

lo normal es que llamarlo con el mismo argumento para root_path y cur_path, por ejemplo move_to_root_folder(os.getcwd(),os.getcwd()) si quieres probarlo en el entorno python.

Cuestiones relacionadas