Tôi muốn sao chép nhiều thư mục với cấu trúc giống nhau (thư mục con có cùng tên) nhưng nội dung khác nhau vào vị trí thứ ba và hợp nhất chúng. Đồng thời, tôi muốn bỏ qua một số phần mở rộng tập tin nhất định và không sao chép chúng.Sao chép và hợp nhất các thư mục, trừ các phần mở rộng nhất định
tôi thấy rằng nhiệm vụ đầu tiên một mình có thể dễ dàng xử lý bởi copy_tree()
chức năng từ thư viện distutils.dir_util
. Vấn đề ở đây là copy_tree()
không thể bỏ qua tệp; nó chỉ đơn giản là bản sao tất cả mọi thứ ..
distutils.dir_util.copy_tree() - ví dụ
dirs_to_copy = [r'J:\Data\Folder_A', r'J:\Data\Folder_B']
destination_dir = r'J:\Data\DestinationFolder'
for files in dirs_to_copy:
distutils.dir_util.copy_tree(files, destination_dir)
# succeeds in merging sub-directories but copies everything.
# Due to time constrains, this is not an option.
Đối với nhiệm vụ thứ hai (sao chép với tùy chọn ngăn chặn các file) có các copytree()
chức năng từ thư viện shutil
lần này. Vấn đề với điều đó bây giờ là nó không thể hợp nhất các thư mục từ thư mục đích không phải tồn tại ..
shutil.copytree() - ví dụ
dirs_to_copy = [r'J:\Data\Folder_A', r'J:\Data\Folder_B']
destination_dir = r'J:\Data\DestinationFolder'
for files in dirs_to_copy:
shutil.copytree(files, destination_dir, ignore=shutil.ignore_patterns("*.abc"))
# successfully ignores files with "abc" extensions but fails
# at the second iteration since "Destination" folder exists..
Có cái gì đó cung cấp tốt nhất của cả hai thế giới hay tôi phải tự viết mã này?
Cách tinh chỉnh [ví dụ copytree tắt] (https://docs.python.org/2/library/shutil.html#copytree-example) để bỏ qua các thư mục trùng lặp bằng cách bắt lỗi từ ' makedirs'? –
@PeterBrittain Nhưng nếu tôi làm điều đó, nó sẽ bỏ qua các thư mục hoàn toàn đúng không? Và, tôi cần nội dung của họ. –
Không, không. Nó sẽ cố gắng làm cho tất cả các thư mục, nhấn một ngoại lệ (mà bạn nuốt với một thử mới ... trừ hander xung quanh một dòng) và sau đó chuyển sang thư mục đi bộ (sao chép các tập tin hoặc đệ quy khi cần thiết). –