Hướng dẫn python copy file to new directory - sao chép tệp python vào thư mục mới
Đầu tiên, tôi đã thực hiện một bảng cheat đầy đủ các phương thức Shutil để bạn tham khảo. Show
Thứ hai, giải thích các phương thức sao chép trong exmaples:
Sao chép đệ quy toàn bộ cây thư mục bắt nguồn từ SRC, trả lại thư mục đích Sao chép các tệp bằng phương pháp 27Phương thức
Mô -đun HĐH và quá trình phụ để sao chép các tệp bằng cách sử dụng lệnh shell hệ điều hành cơ bản (In [30]: shutil.copy2(src, dst) Out[30]: ~/desktop/Head+First+SQL.pdf' In [31]: os.stat(src) Out[31]: os.stat_result(st_mode=33188, st_ino=597749, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=13507926, st_atime=1516067055, st_mtime=1493698739, st_ctime=1514871215) In [32]: os.stat(os.path.join(dst, 'Head+First+SQL.pdf')) Out[32]: os.stat_result(st_mode=33188, st_ino=8598313736, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=13507926, st_atime=1516067063, st_mtime=1493698739, st_ctime=1516067055) # Preseved st_mtime 2 trong Windows hoặc In [30]: shutil.copy2(src, dst) Out[30]: ~/desktop/Head+First+SQL.pdf' In [31]: os.stat(src) Out[31]: os.stat_result(st_mode=33188, st_ino=597749, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=13507926, st_atime=1516067055, st_mtime=1493698739, st_ctime=1514871215) In [32]: os.stat(os.path.join(dst, 'Head+First+SQL.pdf')) Out[32]: os.stat_result(st_mode=33188, st_ino=8598313736, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=13507926, st_atime=1516067063, st_mtime=1493698739, st_ctime=1516067055) # Preseved st_mtime 3 trong Unix.)Cách sao chép tất cả các tệp từ thư mục
Giả sử bạn muốn sao chép tất cả các tệp từ thư mục này sang thư mục khác, sau đó sử dụng hàm In [30]: shutil.copy2(src, dst) Out[30]: ~/desktop/Head+First+SQL.pdf' In [31]: os.stat(src) Out[31]: os.stat_result(st_mode=33188, st_ino=597749, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=13507926, st_atime=1516067055, st_mtime=1493698739, st_ctime=1514871215) In [32]: os.stat(os.path.join(dst, 'Head+First+SQL.pdf')) Out[32]: os.stat_result(st_mode=33188, st_ino=8598313736, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=13507926, st_atime=1516067063, st_mtime=1493698739, st_ctime=1516067055) # Preseved st_mtime 8 để liệt kê tất cả các tệp của thư mục nguồn, sau đó lặp lại danh sách bằng cách sử dụng vòng lặp và sao chép từng tệp bằng hàm In [10]: shutil.copy(src, dst) Out[10]: ~/desktop/Head+First+SQL.pdf' #check their metadata In [25]: os.stat(src) Out[25]: os.stat_result(st_mode=33188, st_ino=597749, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=13507926, st_atime=1516066425, st_mtime=1493698739, st_ctime=1514871215) In [26]: os.stat(os.path.join(dst, 'Head+First+SQL.pdf')) Out[26]: os.stat_result(st_mode=33188, st_ino=8598313736, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=13507926, st_atime=1516066427, st_mtime=1516066425, st_ctime=1516066425) # st_atime,st_mtime,st_ctime changed 8.Sử dụng hàm copytree () để sao chép toàn bộ thư mục
import shutil src_path = r"E:\demos\files\report\profit.txt" dst_path = r"E:\demos\files\account\profit.txt" shutil.copy(src_path, dst_path) print('Copied')0 sao chép đệ quy toàn bộ cây thư mục bắt nguồn từ import shutil src_path = r"E:\demos\files\report\profit.txt" dst_path = r"E:\demos\files\account\profit.txt" shutil.copy(src_path, dst_path) print('Copied')1 vào thư mục có tên import shutil src_path = r"E:\demos\files\report\profit.txt" dst_path = r"E:\demos\files\account\profit.txt" shutil.copy(src_path, dst_path) print('Copied')2 và trả lại thư mục đíchVí dụ: Sao chép tệp đơn
Example::
Output:: copied expense.txt copied profit.txt copied revenue.txt Lặp lại trong danh sách bằng cách sử dụng một vòng lặp để lấy tên tệp riêng lẻTrong mỗi lần lặp, kết hợp tên tệp hiện tại với đường dẫn thư mục nguồn
Ví dụ: Hãy để Lừa vào cách sao chép thư mục báo cáo và tất cả nội dung của nó vào thư mục tài khoản.: Let’s to how to copy the report directory and all its content into an account directory.
Mô -đun Shutil để sao chép tệpMô-đun Python Shutil cung cấp nhiều chức năng cao cấp để thực hiện sao chép và xóa các tệp. Các chức năng này cung cấp một cách tối ưu hóa để sao chép các tệp và do đó tiết kiệm thời gian trong việc thực hiện nhiệm vụ không cần thiết là mở, đọc, viết và đóng các tệp khi không cần xử lý trong tệp đó. Mô -đun SHOTIL cung cấp bốn chức năng sau để sao chép các tệp.offers the following four functions to copy files.
Để quyết định sử dụng chức năng nào để sao chép tệp, chúng tôi phải xem xét các điểm sau.consider the following points.
Phương pháp import os import shutil source_folder = r"E:\demos\files\reports\\" destination_folder = r"E:\demos\files\account\\" # fetch all files for file_name in os.listdir(source_folder): # construct full file path source = source_folder + file_name destination = destination_folder + file_name # copy only files if os.path.isfile(source): shutil.copy(source, destination) print('copied', file_name)2Phương thức copyFile () được sử dụng để sao chép nội dung của một tệp sang tệp khác. Siêu dữ liệu của tệp sẽ không được sao chép. 0
Lưu ý: Siêu dữ liệu của tệp sẽ không được sao chép trong khi sử dụng phương thức này.: The metadata of the file will not be copied while using this method. Thí dụ:: 1Mã của chúng tôi đã sao chép tệp ‘lợi nhuận.txt, trong thư mục đích. Dưới đây là danh sách các tệp có trong thư mục đích:
Sử dụng chức năng & nbsp; ____ ____ 69 & nbsp; để liệt kê tất cả các tệp có trong thư mục đích để xác minh kết quả. Sau đây là những điểm quan trọngimportant points
Để tránh các lỗi trên luôn bao bọc mã của bạn trong khối Ext-Except. Tham khảo ví dụ sau.avoid the above errors always wrap your code in the try-except block. Refer the following example. 2Đầu ra 3Phương pháp In [10]: shutil.copy(src, dst) Out[10]: ~/desktop/Head+First+SQL.pdf' #check their metadata In [25]: os.stat(src) Out[25]: os.stat_result(st_mode=33188, st_ino=597749, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=13507926, st_atime=1516066425, st_mtime=1493698739, st_ctime=1514871215) In [26]: os.stat(os.path.join(dst, 'Head+First+SQL.pdf')) Out[26]: os.stat_result(st_mode=33188, st_ino=8598313736, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=13507926, st_atime=1516066427, st_mtime=1516066425, st_ctime=1516066425) # st_atime,st_mtime,st_ctime changed 5Mô -đun copied expense.txt copied profit.txt copied revenue.txt3 có thêm một phương thức để sao chép tệp được gọi là phương thức 8 sẽ sao chép nội dung của tệp nguồn vào tệp đích. 4Tương tự như phương thức copied expense.txt copied profit.txt copied revenue.txt5 Phương thức này sẽ ném ‘ copied expense.txt copied profit.txt copied revenue.txt1‘ Nếu nguồn và đích chỉ vào cùng một tệp. Hãy xem xét ví dụ sau đây chúng tôi cố gắng sao chép tệp ‘lợi nhuận.txt, từ nguồn 1 sang thư mục đích 2. 5Lưu ý: Nếu không tìm thấy tệp nguồn trong vị trí thì phương thức sao chép () có thể được thực thi và một copied expense.txt copied profit.txt copied revenue.txt9 will be raised. If the destination folder is not writable then ‘ 0‘ will be raised.Copy () vs copyFiles ()Trong khi các phương thức 8 và copied expense.txt copied profit.txt copied revenue.txt5 trong mô -đun SHOTIL hoạt động theo cùng một cách trong việc sao chép các tệp từ vị trí này sang vị trí khác, có một số khác biệt đáng kể giữa chúng. Nếu đường dẫn đích là ‘tệp hoặc‘ thư mục, thì phương thức 8 sẽ tạo một tệp trong tên của tệp nguồn.
Phương pháp 8 gọi copied expense.txt copied profit.txt copied revenue.txt5 và 0 bên trong việc triển khai của nó trong nội bộ. Nhưng ________ 87 () chỉ gọi 2Inside việc triển khai của nóPhương pháp In [10]: shutil.copy(src, dst) Out[10]: ~/desktop/Head+First+SQL.pdf' #check their metadata In [25]: os.stat(src) Out[25]: os.stat_result(st_mode=33188, st_ino=597749, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=13507926, st_atime=1516066425, st_mtime=1493698739, st_ctime=1514871215) In [26]: os.stat(os.path.join(dst, 'Head+First+SQL.pdf')) Out[26]: os.stat_result(st_mode=33188, st_ino=8598313736, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=13507926, st_atime=1516066427, st_mtime=1516066425, st_ctime=1516066425) # st_atime,st_mtime,st_ctime changed 6Trong copied expense.txt copied profit.txt copied revenue.txt3, có thêm một phương thức gọi là 9 có thể được sử dụng để sao chép tệp từ vị trí này sang vị trí khác. 6Trong khi các phương thức 8 và 9 đều sao chép nội dung của tệp cùng với siêu dữ liệu có hai sự khác biệt đáng kể giữa hai phương pháp này.
Các kịch bản mà phương thức này ném ‘giống nhau, tương tự như phương thức Copy (). Chúng ta có thể thấy cách sử dụng phương thức này để sao chép tệp có tên‘ sample.txt, từ nguồn đến đích. 7OUPUT 8Phương pháp import os import shutil source_folder = r"E:\demos\files\reports\\" destination_folder = r"E:\demos\files\account\\" # fetch all files for file_name in os.listdir(source_folder): # construct full file path source = source_folder + file_name destination = destination_folder + file_name # copy only files if os.path.isfile(source): shutil.copy(source, destination) print('copied', file_name)1Phương thức 1 được sử dụng để sao chép đối tượng tệp từ nguồn đến vị trí đích.copy the file object from source to destination location.Ngoài vị trí nguồn và vị trí đích, chúng ta có thể vượt qua kích thước bộ đệm, chỉ ra phần của tệp cần được sao chép. Giá trị mặc định cho điều này là 16 kb. 9
Hãy cho chúng tôi xem một ví dụ để lợi nhuận.txt từ thư mục báo cáo đến thư mục tài khoản. Thí dụ:: 0Sao chép các tệp bằng mô -đun hệ điều hànhMô -đun HĐH Python cung cấp các chức năng có thể tương tác trong HĐH khác nhau. Chúng tôi phải sử dụng các lệnh sao chép cơ bản cụ thể cho hệ điều hành cụ thể. Các phương pháp có thể di động trên các hệ điều hành khác nhau. Sao chép các tệp bằng phương thức In [3]: src = '~/Documents/Head+First+SQL.pdf' In [4]: dst = '~/desktop' In [5]: shutil.copyfileobj(src, dst) AttributeError: 'str' object has no attribute 'read' #copy the file object In [7]: with open(src, 'rb') as f1,open(os.path.join(dst,'test.pdf'), 'wb') as f2: ...: shutil.copyfileobj(f1, f2) In [8]: os.stat(os.path.join(dst,'test.pdf')) Out[8]: os.stat_result(st_mode=33188, st_ino=8598319475, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=13507926, st_atime=1516067347, st_mtime=1516067335, st_ctime=1516067345) 09Phương thức 10 mở một đường ống để thực thi lệnh mà chúng tôi chuyển trên đối tượng tệp. Phương thức này mở một đối tượng tệp trong chế độ đọc hoặc chế độ ghi. Đọc là một chế độ mặc định. 1
Lệnh shell bên dưới để sao chép là 2 cho Windows và 3 cho môi trường UNIX.Hãy cho chúng tôi xem cách sử dụng phương thức này để sao chép một tệp có tên Profit.txt từ thư mục nguồn sang thư mục đích. Trên Unix:: 2Trên Windows: 3Sao chép tệp bằng phương pháp In [3]: src = '~/Documents/Head+First+SQL.pdf' In [4]: dst = '~/desktop' In [5]: shutil.copyfileobj(src, dst) AttributeError: 'str' object has no attribute 'read' #copy the file object In [7]: with open(src, 'rb') as f1,open(os.path.join(dst,'test.pdf'), 'wb') as f2: ...: shutil.copyfileobj(f1, f2) In [8]: os.stat(os.path.join(dst,'test.pdf')) Out[8]: os.stat_result(st_mode=33188, st_ino=8598319475, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=13507926, st_atime=1516067347, st_mtime=1516067335, st_ctime=1516067345) 17Phương thức hệ thống () một lần nữa được sử dụng để thực thi tập lệnh trong lệnh hoặc lệnh HĐH. Giá trị trả về là trạng thái thoát của lệnh.
4 20: Lấy lệnh đối số duy nhất là lệnh shell bên dưới sẽ được thực thi.Hãy cho chúng tôi xem cách sử dụng phương thức này để sao chép một tệp có tên Sample.txt từ thư mục nguồn sang thư mục đích. 5Mô -đun phụ để sao chép tệpMô -đun phụ được sử dụng để thực thi/khởi chạy một quy trình con mới từ ứng dụng của chúng tôi, kết nối với đường ống đầu vào/đầu ra/lỗi của chúng và có được mã trả lại của chúng. Mô -đun này dự định thay thế một số mô -đun và chức năng cũ hơn: 6Phương pháp In [3]: src = '~/Documents/Head+First+SQL.pdf' In [4]: dst = '~/desktop' In [5]: shutil.copyfileobj(src, dst) AttributeError: 'str' object has no attribute 'read' #copy the file object In [7]: with open(src, 'rb') as f1,open(os.path.join(dst,'test.pdf'), 'wb') as f2: ...: shutil.copyfileobj(f1, f2) In [8]: os.stat(os.path.join(dst,'test.pdf')) Out[8]: os.stat_result(st_mode=33188, st_ino=8598319475, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=13507926, st_atime=1516067347, st_mtime=1516067335, st_ctime=1516067345) 21Phương thức này có thể được sử dụng để thực thi bất kỳ lệnh nào được truyền dưới dạng đối số cho phương thức này và giá trị trả về sẽ là trạng thái cuối của lệnh được thực thi. 7
8Đầu ra 9Sao chép các tệp bằng phương pháp In [3]: src = '~/Documents/Head+First+SQL.pdf' In [4]: dst = '~/desktop' In [5]: shutil.copyfileobj(src, dst) AttributeError: 'str' object has no attribute 'read' #copy the file object In [7]: with open(src, 'rb') as f1,open(os.path.join(dst,'test.pdf'), 'wb') as f2: ...: shutil.copyfileobj(f1, f2) In [8]: os.stat(os.path.join(dst,'test.pdf')) Out[8]: os.stat_result(st_mode=33188, st_ino=8598319475, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=13507926, st_atime=1516067347, st_mtime=1516067335, st_ctime=1516067345) 27Phương thức 28 một lần nữa được sử dụng để thực thi các lệnh bên ngoài và nắm bắt đầu ra của nó. Điều này rất giống với phương thức 29 với một tập hợp các đối số tương tự. 0 30: Nếu giá trị này là & nbsp; ________ 131 & nbsp; thì tất cả các kết thúc dòng sẽ được chuyển đổi thành & nbsp; ____ 132 & nbsp; như được mô tả cho & nbsp; 1Đầu ra 9 |