2011-12-08 15 views
5

Mam konkretny problem w python. Poniżej znajduje się moja struktura folderów.Przeniesienie zawartości folderu podrzędnego do folderu nadrzędnego w pythonie

dstfolder/slave1/slave

chcę zawartość folderu 'niewolnika' mają być przeniesione do "SLAVE1" (folder nadrzędny). Po przeniesieniu folder "niewolnik" powinien zostać usunięty. shutil.move wydaje się nie pomagać.

Proszę dać mi znać, jak to zrobić?

+0

Co próbowaliście? 'shutil.move (src, dst)' documentation mówi "Rekursywnie przenieś plik lub katalog (src) do innej lokalizacji (dst)", więc powinno działać. – jcollado

Odpowiedz

9

Przykład z wykorzystaniem modułów systemu operacyjnego i 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

Dzięki tito, drobne zmiany i zadziałały !!! Niestety nie mogę głosować, ponieważ moja reputacja jest bardzo niska :-( –

+0

Nie możesz przegłosować, ale możesz potwierdzić odpowiedź :) – tito

+0

Możesz także przenieść zawartość folderu nadrzędnego do nowego folderu podrzędnego za pomocą, Powiedz, że musisz przenieś dir1/* do dir1/dir2. Więc możesz zrobić, 'shutil.move (" dir1 "," dir2) ' ' shutil.move ("dir2", oa.path.join ("dir1", "dir2") ' –

-2

Może masz do słownika niewolnika, a następnie

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

Będzie ona działać nie będzie?

+0

Ta odpowiedź dotyczy systemów operacyjnych POSIX i powoduje, że kod jest mniej przenośny. – jhrf

0

Problem może być z ścieżce określonej w funkcji shutil.move

Spróbuj kod

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

Wklej do pliku .py w dstfolderze. To znaczy. slave1 i ten plik powinien pozostać obok siebie. a następnie uruchomić. pracował dla mnie

+0

Sprawdź również, czy masz wymagane uprawnienia – Pulimon

0

Potrzebowałem czegoś trochę bardziej ogólnego, tj. przenieść wszystkie pliki ze wszystkich folderów [sub] + do folderu głównego.

Na przykład zacząć:

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

I skończyć z:

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

Szybka funkcja rekurencyjna załatwia sprawę:

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) 

Będziesz zwykle nazywamy go z ten sam argument dla root_path i cur_path, np. move_to_root_folder(os.getcwd(),os.getcwd()), jeśli chcesz go wypróbować w środowisku Pythona.

Powiązane problemy