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.
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