Làm cách nào để sao chép đường dẫn tệp trong python?

Python đi kèm với nhiều mô-đun sẵn có [như hệ điều hành, quy trình con và đóng cửa] để hỗ trợ các thao tác I/O tệp. Và trong bài đăng này, bạn sẽ thấy một số cách độc đáo để sao chép tệp trong Python. Vì vậy, hãy bắt đầu tìm hiểu chín phương pháp khác nhau để thực hiện thao tác sao chép tệp Python

Trước khi bắt đầu, bạn phải hiểu tại sao việc biết phương pháp sao chép tệp nào trong Python là tốt nhất cho bạn lại quan trọng đến vậy. Đó là bởi vì các hoạt động I/O của tệp cần nhiều hiệu suất và thường dẫn đến tắc nghẽn. Đó là lý do tại sao bạn nên chọn cách tiếp cận tốt nhất có thể theo thiết kế ứng dụng của mình

Một số chương trình sử dụng tài nguyên được chia sẻ sẽ thích sao chép tệp ở chế độ chặn trong khi một số chương trình có thể muốn thực hiện không đồng bộ. Ví dụ: sử dụng luồng để sao chép tệp hoặc bắt đầu một quy trình riêng để thực hiện việc đó. Một điểm khác cần xem xét là tính di động của nền tảng. Điều đó có nghĩa là bạn nên biết hệ điều hành mục tiêu [Windows/Linux/Mac OS X, v.v. ] bất cứ nơi nào bạn sẽ chạy chương trình

Phải đọc - Xử lý ngoại lệ Python

Với mô-đun Shutil, bạn có thể tự động sao chép cả tệp và thư mục. Mô-đun này tuân theo một thiết kế tối ưu hóa. Nó giúp bạn không phải thực hiện các thao tác tốn nhiều thời gian như mở, đọc, viết và đóng tệp khi không có nhu cầu xử lý thực sự. Nó có đầy đủ các chức năng và phương pháp tiện ích có thể cho phép bạn thực hiện các tác vụ như sao chép, di chuyển hoặc xóa tệp và thư mục

Cách thực hiện sao chép tệp bằng Python – 9 cách để tìm hiểu

Dưới đây là chín phương pháp để chứng minh “Làm thế nào để sao chép một tệp trong Python?”

Tệp sao chép Python – Cách thực hiện cho người mới bắt đầu

1. phương thức shutdown copyfile[]

Phương thức này chỉ sao chép nội dung của nguồn đến đích nếu đích có thể ghi được. Nếu bạn không có quyền phù hợp, thì nó sẽ tăng IOError

Nó hoạt động bằng cách mở tệp đầu vào để đọc trong khi bỏ qua loại tệp của nó

Tiếp theo, nó không xử lý các tệp đặc biệt theo bất kỳ cách nào khác và sẽ không tạo bản sao của chúng

Phương thức copyfile[] sử dụng hàm cấp thấp hơn copyfileobj[] bên dưới. Nó lấy tên tệp làm đối số, mở chúng và chuyển các phần xử lý tệp tới copyfileobj[]. Có một đối số thứ ba tùy chọn trong phương thức này mà bạn có thể sử dụng để chỉ định độ dài bộ đệm. Sau đó, nó sẽ mở tệp để đọc theo khối kích thước bộ đệm đã chỉ định. Tuy nhiên, hành vi mặc định là đọc toàn bộ tệp trong một lần

copyfile[source_file, destination_file]

Sau đây là những điểm cần biết về phương thức copyfile[]

  • Nó sao chép nội dung của nguồn vào một tệp có tên là đích
  • Nếu đích không thể ghi thì thao tác sao chép sẽ dẫn đến ngoại lệ IOError
  • Nó sẽ trả về SameFileError nếu cả tệp nguồn và tệp đích đều giống nhau
  • Tuy nhiên, nếu đích tồn tại trước với một tên khác, thì bản sao sẽ ghi đè lên nội dung của nó
  • Lỗi 13 sẽ xảy ra nếu đích là một thư mục có nghĩa là phương pháp này sẽ không sao chép vào một thư mục
  • Nó không hỗ trợ sao chép các tệp như ký tự hoặc khối thiết bị và đường ống
# Python Copy File - Sample Code
        
from shutil import copyfile
from sys import exit

source = input["Enter source file with full path: "]
target = input["Enter target file with full path: "]

# adding exception handling
try:
    copyfile[source, target]
except IOError as e:
    print["Unable to copy file. %s" % e]
    exit[1]
except:
    print["Unexpected error:", sys.exc_info[]]
    exit[1]

print["\nFile copy done!\n"]

while True:
    print["Do you like to print the file ? [y/n]: "]
    check = input[]
    if check == 'n':
        break
    elif check == 'y':
        file = open[target, "r"]
        print["\nHere follows the file content:\n"]
        print[file.read[]]
        file.close[]
        print[]
        break
    else:
        continue

2. phương thức Shutil copy[]

copyfile[source_file, [destination_file or dest_dir]]

Phương thức copy[] hoạt động giống như lệnh “cp” trong Unix. Điều đó có nghĩa là nếu mục tiêu là một thư mục, thì nó sẽ tạo một tệp mới bên trong nó có cùng tên [tên cơ sở] với tệp nguồn. Ngoài ra, phương pháp này sẽ đồng bộ hóa các quyền của tệp đích với nguồn sau khi sao chép nội dung của nó. Nó cũng ném SameFileError nếu bạn đang sao chép cùng một tệp

import os
import shutil

source = 'current/test/test.py'
target = '/prod/new'

assert not os.path.isabs[source]
target = os.path.join[target, os.path.dirname[source]]

# create the folders if not already exists
os.makedirs[target]

# adding exception handling
try:
    shutil.copy[source, target]
except IOError as e:
    print["Unable to copy file. %s" % e]
except:
    print["Unexpected error:", sys.exc_info[]]

bản sao [] so với bản sao tệp [] –

  1. copy[] cũng đặt các bit quyền trong khi sao chép nội dung trong khi copyfile[] chỉ sao chép dữ liệu
  2. copy[] sẽ sao chép một tệp nếu đích là một thư mục trong khi copyfile[] sẽ không thành công với lỗi 13
  3. Thật thú vị, phương thức copyfile[] sử dụng phương thức copyfileobj[] trong quá trình triển khai của nó trong khi phương thức copy[] lần lượt sử dụng các hàm copyfile[] và copymode[]
  4. Điểm 3 cho thấy rằng copyfile[] sẽ nhanh hơn một chút so với copy[] vì copy[] có nhiệm vụ bổ sung [duy trì các quyền] trong tầm tay

3. phương thức shutdown copyfileobj[]

Phương thức này sao chép tệp vào đường dẫn đích hoặc đối tượng tệp. Nếu mục tiêu là một đối tượng tệp, thì bạn cần đóng nó một cách rõ ràng sau khi gọi copyfileobj[]. Nó giả định một đối số tùy chọn [kích thước bộ đệm] mà bạn có thể sử dụng để cung cấp độ dài bộ đệm. Đó là số byte được lưu trong bộ nhớ trong quá trình sao chép. Kích thước mặc định mà hệ thống sử dụng là 16KB

from shutil import copyfileobj
status = False
if isinstance[target, string_types]:
    target = open[target, 'wb']
    status = True
try:
    copyfileobj[self.stream, target, buffer_size]
finally:
    if status:
        target.close[]

4. phương thức shutdown copy2[]

Tuy nhiên, phương thức copy2[] hoạt động giống như phương thức copy[]. Nhưng nó cũng có thêm thời gian truy cập và sửa đổi trong siêu dữ liệu trong khi sao chép dữ liệu. Sao chép cùng một tệp sẽ dẫn đến SameFileError

from shutil import *
import os 
import time
from os.path import basename

def displayFileStats[filename]:
    file_stats = os.stat[basename[filename]]
    print['\tMode    :', file_stats.st_mode]
    print['\tCreated :', time.ctime[file_stats.st_ctime]]
    print['\tAccessed:', time.ctime[file_stats.st_atime]]
    print['\tModified:', time.ctime[file_stats.st_mtime]]

os.mkdir['test']

print['SOURCE:']
displayFileStats[__file__]

copy2[__file__, 'testfile']

print['TARGET:']
displayFileStats[os.path.realpath[os.getcwd[] + './test/testfile']]

bản sao [] so với bản sao2 []

  1. bản sao [] chỉ đặt các bit quyền trong khi bản sao 2 [] cũng cập nhật siêu dữ liệu tệp bằng dấu thời gian
  2. Phương thức copy[] gọi nội bộ copyfile[] và copymode[] trong khi copy2[] thay thế lệnh gọi copymode[] bằng copystat[]

copymode[] so với copystat[]

đóng cửa. chế độ sao chép []

copymode[source, target, *, follow_symlinks=True]
  • Nó dự định sao chép các bit quyền từ nguồn sang các tệp đích
  • Nội dung tệp, chủ sở hữu và nhóm không thay đổi. Các đối số được truyền là các chuỗi
  • Nếu đối số follow_symlinks là sai và hai đối số đầu tiên là liên kết tượng trưng, ​​thì copymode[] sẽ cố cập nhật liên kết đích chứ không phải tệp thực mà nó đang trỏ

đóng cửa. bản sao []

copystat[source, target, *, follow_symlinks=True]
  • Nó cố gắng duy trì các bit quyền, thời gian sử dụng/thời gian cập nhật lần cuối và các cờ của tệp đích
  • copystat[] bao gồm các thuộc tính mở rộng trong khi sao chép trên Linux. Nội dung tệp/chủ sở hữu/nhóm không thay đổi
  • Nếu đối số follow_symlinks là sai và hai đối số đầu tiên là liên kết tượng trưng, ​​thì copystat[] sẽ cập nhật chúng, không phải các tệp mà chúng trỏ

5. phương thức os popen[]

Phương pháp này tạo một đường dẫn đến hoặc từ lệnh. Nó trả về một đối tượng tệp đang mở kết nối với một đường ống. Bạn có thể sử dụng nó để đọc hoặc viết theo chế độ tập tin, tôi. e. , 'r' [mặc định] hoặc 'w. ’

________số 8
  • chế độ – Nó có thể là 'r' [mặc định] hoặc 'w'
  • bufsize - Nếu giá trị của nó là 0, thì sẽ không có bộ đệm nào xảy ra. Nếu kích thước bufsize là 1, thì quá trình đệm dòng sẽ diễn ra khi truy cập tệp. Nếu bạn cung cấp một giá trị lớn hơn 1, thì bộ đệm sẽ xảy ra với kích thước bộ đệm được chỉ định. Tuy nhiên, đối với giá trị âm, hệ thống sẽ lấy kích thước bộ đệm mặc định

Đối với hệ điều hành Windows

import os

os.popen['copy 1.txt.py 2.txt.py']

Đối với hệ điều hành Linux

# Python Copy File - Sample Code
        
from shutil import copyfile
from sys import exit

source = input["Enter source file with full path: "]
target = input["Enter target file with full path: "]

# adding exception handling
try:
    copyfile[source, target]
except IOError as e:
    print["Unable to copy file. %s" % e]
    exit[1]
except:
    print["Unexpected error:", sys.exc_info[]]
    exit[1]

print["\nFile copy done!\n"]

while True:
    print["Do you like to print the file ? [y/n]: "]
    check = input[]
    if check == 'n':
        break
    elif check == 'y':
        file = open[target, "r"]
        print["\nHere follows the file content:\n"]
        print[file.read[]]
        file.close[]
        print[]
        break
    else:
        continue
0

6. phương pháp hệ thống os []

Phương thức system[] cho phép bạn thực thi ngay lập tức bất kỳ lệnh OS hoặc tập lệnh nào trong subshell

Bạn cần chuyển lệnh hoặc tập lệnh làm đối số cho lệnh gọi system[]. Trong nội bộ, phương thức này gọi hàm thư viện C tiêu chuẩn

Giá trị trả về của nó là trạng thái thoát của lệnh

Đối với hệ điều hành Windows

# Python Copy File - Sample Code
        
from shutil import copyfile
from sys import exit

source = input["Enter source file with full path: "]
target = input["Enter target file with full path: "]

# adding exception handling
try:
    copyfile[source, target]
except IOError as e:
    print["Unable to copy file. %s" % e]
    exit[1]
except:
    print["Unexpected error:", sys.exc_info[]]
    exit[1]

print["\nFile copy done!\n"]

while True:
    print["Do you like to print the file ? [y/n]: "]
    check = input[]
    if check == 'n':
        break
    elif check == 'y':
        file = open[target, "r"]
        print["\nHere follows the file content:\n"]
        print[file.read[]]
        file.close[]
        print[]
        break
    else:
        continue
1

Đối với hệ điều hành Linux

# Python Copy File - Sample Code
        
from shutil import copyfile
from sys import exit

source = input["Enter source file with full path: "]
target = input["Enter target file with full path: "]

# adding exception handling
try:
    copyfile[source, target]
except IOError as e:
    print["Unable to copy file. %s" % e]
    exit[1]
except:
    print["Unexpected error:", sys.exc_info[]]
    exit[1]

print["\nFile copy done!\n"]

while True:
    print["Do you like to print the file ? [y/n]: "]
    check = input[]
    if check == 'n':
        break
    elif check == 'y':
        file = open[target, "r"]
        print["\nHere follows the file content:\n"]
        print[file.read[]]
        file.close[]
        print[]
        break
    else:
        continue
2

7. Sao chép tệp Python bằng thư viện luồng theo cách Async

Nếu bạn muốn sao chép tệp không đồng bộ, hãy sử dụng phương pháp bên dưới. Trong phần này, chúng tôi đã sử dụng mô-đun luồng của Python để chạy thao tác sao chép trong nền

Trong khi sử dụng phương pháp này, vui lòng đảm bảo sử dụng khóa để tránh bế tắc. Bạn có thể phải đối mặt với nó nếu ứng dụng của bạn đang sử dụng nhiều luồng đọc/ghi một tệp

# Python Copy File - Sample Code
        
from shutil import copyfile
from sys import exit

source = input["Enter source file with full path: "]
target = input["Enter target file with full path: "]

# adding exception handling
try:
    copyfile[source, target]
except IOError as e:
    print["Unable to copy file. %s" % e]
    exit[1]
except:
    print["Unexpected error:", sys.exc_info[]]
    exit[1]

print["\nFile copy done!\n"]

while True:
    print["Do you like to print the file ? [y/n]: "]
    check = input[]
    if check == 'n':
        break
    elif check == 'y':
        file = open[target, "r"]
        print["\nHere follows the file content:\n"]
        print[file.read[]]
        file.close[]
        print[]
        break
    else:
        continue
3

8. Sử dụng phương thức call[] của quy trình con để sao chép tệp trong Python

Mô-đun quy trình con cung cấp một giao diện đơn giản để làm việc với các quy trình con. Nó cho phép chúng tôi khởi chạy các quy trình con, gắn vào các ống đầu vào/đầu ra/lỗi của chúng và truy xuất các giá trị trả về

Mô-đun quy trình con nhằm mục đích thay thế các mô-đun và chức năng kế thừa như – os. hệ thống, hệ điều hành. sinh sản *, hệ điều hành. popen*, popen2. *

Nó hiển thị một phương thức call[] để gọi các lệnh hệ thống để thực thi các tác vụ của người dùng

# Python Copy File - Sample Code
        
from shutil import copyfile
from sys import exit

source = input["Enter source file with full path: "]
target = input["Enter target file with full path: "]

# adding exception handling
try:
    copyfile[source, target]
except IOError as e:
    print["Unable to copy file. %s" % e]
    exit[1]
except:
    print["Unexpected error:", sys.exc_info[]]
    exit[1]

print["\nFile copy done!\n"]

while True:
    print["Do you like to print the file ? [y/n]: "]
    check = input[]
    if check == 'n':
        break
    elif check == 'y':
        file = open[target, "r"]
        print["\nHere follows the file content:\n"]
        print[file.read[]]
        file.close[]
        print[]
        break
    else:
        continue
4

9. Sử dụng phương thức check_output[] của quy trình con để sao chép tệp trong Python

Với phương thức check_output[] của quy trình con, bạn có thể chạy một lệnh bên ngoài hoặc một chương trình và ghi lại đầu ra của nó. Nó cũng hỗ trợ đường ống

# Python Copy File - Sample Code
        
from shutil import copyfile
from sys import exit

source = input["Enter source file with full path: "]
target = input["Enter target file with full path: "]

# adding exception handling
try:
    copyfile[source, target]
except IOError as e:
    print["Unable to copy file. %s" % e]
    exit[1]
except:
    print["Unexpected error:", sys.exc_info[]]
    exit[1]

print["\nFile copy done!\n"]

while True:
    print["Do you like to print the file ? [y/n]: "]
    check = input[]
    if check == 'n':
        break
    elif check == 'y':
        file = open[target, "r"]
        print["\nHere follows the file content:\n"]
        print[file.read[]]
        file.close[]
        print[]
        break
    else:
        continue
5

Tóm tắt – Các phương pháp sao chép tệp Python để tìm hiểu

Ngay cả khi bạn là một lập trình viên Python dày dạn kinh nghiệm, bạn có thể thích các phương pháp khác nhau để sao chép tệp. Python có nhiều tính năng đến mức người ta có thể nhanh chóng sử dụng chúng để thực hiện một tác vụ theo nhiều cách

Các mô-đun hệ điều hành, quy trình con và cửa sổ trong Python hỗ trợ rất nhiều cho các hoạt động I/O của tệp. Tuy nhiên, ở đây, chúng tôi chỉ đề cập đến các phương pháp sao chép tệp Python. Nhưng bạn sẽ thấy rất nhiều cách mới và trực quan để làm những việc khác trong các bài đăng trong tương lai của chúng tôi

Cuối cùng, nếu bạn thích bài đăng này, thì hãy quan tâm để chia sẻ nó. Để giữ liên lạc, vui lòng theo dõi chúng tôi trên Facebook và Twitter

Chủ Đề