19.Sao chép tệp trong Python bằng cách sử dụng shutil.copy (), shutil.copystat ()

Phương pháp sao chép tệp trong Python

Python cung cấp các hàm dựng sẵn giúp việc sao chép các tệp trở nên dễ dàng hơn thông qua các tiện ích Shell của hệ điều hành.

Lệnh dưới đây được sử dụng để sao chép tệp

shutil.copy (src, dst)

Lệnh sau được sử dụng để sao chép tệp kèm theo thông tin của tệp (metadata)

shutil.copystat(src, dst)

Dưới đây là các bước để sao chép tệp trong Python

Bước 1) Trước khi chúng ta sao chép một tệp, chúng ta cần lấy đường dẫn tới tệp gốc trong thư mục hiện tại. Đoạn mã sau:

  • Khai báo biến

  • Sử dụng hàm split với các biến

Giải thích mã nguồn

  • Đầu tiên chúng ta kiểm tra tệp "guru99.txt" có tồn tại hay không. Vì chúng ta đã tạo tệp guru99.txt trước đó, nên chúng ta biết rằng nó tồn tại và chúng ta có thể tiếp tục.

  • Chúng ta sẽ lưu đường dẫn của tệp ra biến "src", nếu file đó tồn tại.

  • Sau khi chúng ta lấy ra được đường dẫn, chúng ta sẽ phân tách đường dẫn và tên tệp.

  • Để làm điều này, chúng ta sẽ sử dụng hàm phân tách path.split với biến src.

  • Mã nguồn sau khi thực thi sẽ in riêng "file name" (tên tệp) và "file path" (tên đường dẫn).

Bước 2) Chúng ta sử dụng mô-đun Shutil để tạo một bản sao của tệp hiện có. Ở đây, chúng ta đã sử dụng để tạo một bản sao của tệp "guru99.txt."

Giải thích mã nguồn

  • Lấy tên tệp gốc "guru99.txt"và thêm chữ cái .bak ở cuối "guru99.txt.bak". Tên này với phần mở rộng .bak sẽ là bản sao của chúng ta.

  • Sau đó chúng ta sử dụng hàm tiện ích copy để sao chép từ vị trí nguồn tới vị trí đích.

  • Khi chạy mã nguồn, bạn sẽ thấy một tệp trùng lặp với đuôi file .bak  đã được tạo ra với nội dung tương tự tệp "guru99.txt".

Bước 3) Hàm copy chỉ sao chép nội dung của tệp chứ không sao chép các thông tin khác của tệp. Để sao chép thông tin (meta-data) đi kèm với tệp, quyền cũng như các thông tin khác, bạn cần sử dụng hàm “copystat”. Trước khi chúng ta thực thi đoạn mã nguồn sau thì bạn hãy xóa file "guru99.txt.bak".

Khi tệp "guru99.txt.bak" đã được xóa và chạy chương trình, nó sẽ tạo một bản sao của tệp .txt nhưng lần này với tất cả các thông tin như quyền của tệp, thời gian sửa đổi và thông tin meta-data. Bạn có thể vào tệp mới được sao chép để xác minh thông tin.

Dưới đây là mã nguồn của chương trình

import os
import shutil
from os import path

def main():
    # make a duplicate of an existing file
	if path.exists("guru99.txt"):
    # get the path to the file in the current directory
        src = path.realpath("guru99.txt");
    
	#seperate the path from the filter
	head, tail = path.split(src)
	print("path:" +head)
	print("file:" +tail)
	
	#let's make a backup copy by appending "bak" to the name
	dst = src+".bak"
	# nowuse the shell to make a copy of the file
	shutil.copy(src, dst)
	
	#copy over the permissions,modification
	shutil.copystat(src,dst)
	
if __name__=="__main__":
	main()

Bước 4) Bạn có thể in ra thông tin về thời gian tệp được sửa đổi lần cuối

  • Dòng lệnh 15 trả về thứ, ngày, tháng, năm và thời gian tệp .txt (guru99) được sửa lần cuối. Chúng ta sử dụng mô-đun path để lấy chi tiết thời gian sửa đổi tệp, và sau đó chúng ta sử dụng hàm ctime của lớp time để chuyển đổi nó thành dạng dữ liệu đọc được. Sau khi mã nguồn được thực thi, chúng ta có thể thấy tập tin guru99.txt được sửa lần cuối vào Mon, Jan 8th at 13:35 2018.

  • Dòng lệnh 17 thực hiện cùng một nhiệm vụ in ra thời gian sửa đổi của tệp, nhưng được biểu diễn dưới một định dạng khác. Ở đây chúng ta sử dụng hàm trả về thời gian sửa đổi (path.getmtime(“guru99.txt”)). Giờ thay vì dùng hàm ctime, chúng ta sẽ sử dụng hàm fromtimestamp và xây dựng một đối tượng datetime. Ở đầu ra, bạn sẽ thấy chi tiết về thời gian sửa đổi cuối cùng được in ra dưới định dạng khác 2018-01-08, 13:35:51.334072

Dưới đây là mã nguồn

#
# Example file for working with o.s path module

import os
from os import path
import datetime
from datetime import date, time, timedelta
import time

def main():
    # Get the modification time
    t = time.ctime(path.getmtime("guru99.txt.bak"))
    print(t)
    print(datetime.datetime.fromtimestamp(path.getmtime("guru99.txt.bak")))


if __name__ == "__main__":
    main()

Tổng kết:

  • Để tạo một bản sao của tệp hiện có, chúng ta có thể sử dụng hàm "shutil.copy (src, dst)".

  • Để sao chép tất cả thông tin như quyền, thời gian sửa đổi, thông tin meta-data của một tệp sang một tệp mới, chúng ta có thể sử dụng hàm "shutil.copystat (src, dst)".

** Nếu bạn muốn viết các nội dung đặt biệt thì hãy làm theo hướng dẫn sau

Xem thêm 10 bình luận
Viết blog mới của bạn
Báo lỗi trang
Đang tải