2011-12-08 44 views
5

Tôi có một vấn đề cụ thể trong python. Dưới đây là cấu trúc thư mục của tôi.Di chuyển nội dung thư mục con vào thư mục mẹ trong python

dstfolder/slave1/nô lệ

Tôi muốn các nội dung của thư mục 'nô lệ' để được chuyển đến "slave1" (thư mục mẹ). Sau khi di chuyển, bạn cần xóa thư mục 'slave' 'slave'. shutil.move dường như không giúp ích gì.

Vui lòng cho tôi biết cách thực hiện?

+0

Bạn đã thử những gì? 'shutil.move (src, dst)' tài liệu nói "đệ quy di chuyển một tập tin hoặc thư mục (src) đến một vị trí khác (dst)", do đó, nó sẽ làm việc. – jcollado

Trả lời

9

Ví dụ sử dụng os và shutil module:

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

Cảm ơn tito, những thay đổi nhỏ và nó đã hoạt động !!! Xin lỗi bạn không thể bỏ phiếu vì danh tiếng của tôi rất thấp :-( –

+0

Bạn không thể upvote, nhưng bạn có thể xác thực phản hồi :) – tito

+0

Ngoài ra bạn có thể di chuyển nội dung thư mục mẹ sang thư mục con mới bằng cách sử dụng, Giả sử bạn cần chuyển dir1/* sang dir1/dir2. Vì vậy, bạn có thể làm, 'shutil.move (" dir1 "," dir2) ' ' shutil.move ("dir2", oa.path.join ("dir1", "dir2") ' –

-2

Có lẽ bạn có thể nhận được vào các nô lệ từ điển, và sau đó

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

Nó sẽ làm việc phải không?

+0

Câu trả lời này dành riêng cho hệ điều hành POSIX và sẽ khiến mã không thể di chuyển được. – jhrf

0

Vấn đề có thể là với đường dẫn mà bạn chỉ định trong hàm shutil.move

Hãy thử mã này

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

Dán nó vào một tập tin .py trong dstfolder. I E. slave1 và tệp này sẽ vẫn còn cạnh nhau. và sau đó chạy nó. đã làm việc cho tôi

+0

Đồng thời kiểm tra xem bạn có các quyền cần thiết – Pulimon

0

Tôi cần một cái gì đó chung chung hơn một chút, tức là di chuyển tất cả các tệp từ tất cả các thư mục [phụ] vào thư mục gốc.

Ví dụ bắt đầu với:

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

Và kết thúc với:

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

Một hàm đệ quy nhanh chóng hiện các trick:

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ạn thường sẽ gọi nó với cùng một đối số cho root_pathcur_path, ví dụ move_to_root_folder(os.getcwd(),os.getcwd()) nếu bạn muốn thử nó trong môi trường python.

Các vấn đề liên quan