用Python复制文件的九种方法("Python实现文件复制的九大技巧详解")
原创
一、使用Python内置的 shutil 模块复制文件
使用 shutil 模块的 copy 方法可以轻松地复制文件。以下是示例代码:
import shutil
def copy_file_with_shutil(src, dst):
shutil.copy(src, dst)
# 使用示例
source_path = 'source.txt'
destination_path = 'destination.txt'
copy_file_with_shutil(source_path, destination_path)
二、使用 os 模块复制文件
使用 os 模块的 copy 方法也可以实现文件复制。以下是示例代码:
import os
def copy_file_with_os(src, dst):
with open(src, 'rb') as fsrc:
with open(dst, 'wb') as fdst:
fdst.write(fsrc.read())
# 使用示例
source_path = 'source.txt'
destination_path = 'destination.txt'
copy_file_with_os(source_path, destination_path)
三、使用 Python 的读写操作复制文件
通过读取源文件的内容并写入目标文件,可以实现文件复制。以下是示例代码:
def copy_file_with读写(src, dst):
with open(src, 'rb') as fsrc:
with open(dst, 'wb') as fdst:
while True:
chunk = fsrc.read(1024)
if not chunk:
break
fdst.write(chunk)
# 使用示例
source_path = 'source.txt'
destination_path = 'destination.txt'
copy_file_with读写(source_path, destination_path)
四、使用 Python 的 mmap 模块复制文件
mmap 模块可以创建内存映射文件,通过映射源文件和目标文件来实现复制。以下是示例代码:
import mmap
def copy_file_with_mmap(src, dst):
with open(src, 'rb') as fsrc, open(dst, 'wb') as fdst:
with mmap.mmap(fsrc.fileno(), length=0, access=mmap.ACCESS_READ) as msrc:
with mmap.mmap(fdst.fileno(), length=0, access=mmap.ACCESS_WRITE) as mdst:
mdst.write(msrc.read())
# 使用示例
source_path = 'source.txt'
destination_path = 'destination.txt'
copy_file_with_mmap(source_path, destination_path)
五、使用 Python 的 sendfile 方法复制文件
sendfile 方法可以在操作系统级别实现文件复制,减成本时间复制效能。以下是示例代码:
import os
import socket
def copy_file_with_sendfile(src, dst):
with open(src, 'rb') as fsrc, open(dst, 'wb') as fdst:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect(('localhost', 0))
s.sendfile(fsrc, fdst)
# 使用示例
source_path = 'source.txt'
destination_path = 'destination.txt'
copy_file_with_sendfile(source_path, destination_path)
六、使用 Python 的 tempfile 模块复制文件
tempfile 模块可以创建临时文件,通过临时文件来实现文件复制。以下是示例代码:
import tempfile
def copy_file_with_tempfile(src, dst):
with open(src, 'rb') as fsrc:
with tempfile.NamedTemporaryFile(delete=False) as ftmp:
ftmp.write(fsrc.read())
ftmp.flush()
os.rename(ftmp.name, dst)
# 使用示例
source_path = 'source.txt'
destination_path = 'destination.txt'
copy_file_with_tempfile(source_path, destination_path)
七、使用 Python 的 subprocess 模块复制文件
subprocess 模块可以调用系统命令实现文件复制。以下是示例代码:
import subprocess
def copy_file_with_subprocess(src, dst):
subprocess.run(['cp', src, dst], check=True)
# 使用示例
source_path = 'source.txt'
destination_path = 'destination.txt'
copy_file_with_subprocess(source_path, destination_path)
八、使用 Python 的 fabric 模块复制文件
fabric 模块是一个用于自动化部署的工具,也可以实现远程文件复制。以下是示例代码:
from fabric import Connection
def copy_file_with_fabric(src, dst, host, port, user):
with Connection(host=host, port=port, user=user) as c:
c.run(f'scp {src} {user}@{host}:{dst}')
# 使用示例
source_path = 'source.txt'
destination_path = '/home/user/destination.txt'
host = 'example.com'
port = 22
user = 'username'
copy_file_with_fabric(source_path, destination_path, host, port, user)
九、使用 Python 的 paramiko 模块复制文件
paramiko 是一个 Python 实现的 SSH2 协议库,可以用于远程文件复制。以下是示例代码:
import paramiko
def copy_file_with_paramiko(src, dst, host, port, user, password):
transport = paramiko.Transport((host, port))
transport.connect(username=user, password=password)
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.put(src, dst)
sftp.close()
transport.close()
# 使用示例
source_path = 'source.txt'
destination_path = '/home/user/destination.txt'
host = 'example.com'
port = 22
user = 'username'
password = 'password'
copy_file_with_paramiko(source_path, destination_path, host, port, user, password)
以上就是使用 Python 实现文件复制的九种方法。不同的方法适用于不同的场景,可以按照实际需求选择合适的方法。