您的位置:

使用Python在Linux下进行文件复制操作

一、复制文件的基本方法

Python在Linux上进行文件复制操作的方法主要是通过shutil库中提供的copy()方法来实现,它的基本用法如下:

import shutil
shutil.copy(源文件名, 目标文件名)

其中源文件名和目标文件名都是带有路径的字符串,例如:

import shutil
shutil.copy('/home/user/source_file.txt', '/home/user/destination_folder/')

上述代码将源文件复制到“destination_folder”文件夹中,文件名不变。

此外,shutil库还提供了很多其他的文件操作方法,例如copy2()方法不仅可以将文件复制到目标位置,还会尝试保留文件的元数据(如权限、时间戳等),使用方式与copy()方法类似。

二、复制文件夹及其子文件夹

如果要复制整个文件夹,可以使用shutil库中的copytree()方法:

import shutil
shutil.copytree(源文件夹名, 目标文件夹名)

注意,目标文件夹必须是不存在的,否则会抛出异常。

copytree()方法还有一些其他性质,例如可以指定文件过滤器,只复制符合条件的文件。

三、复制时显示进度条

如果在大文件复制时需要显示进度条,可以使用tqdm库,它可以方便地在终端中显示进度条,代码如下:

import shutil
from tqdm import tqdm

file_path = '/path/to/large_file'
destination_folder = '/path/to/destination'

with tqdm(total=os.path.getsize(file_path), unit='B', unit_scale=True) as progress_bar:
    shutil.copy(file_path, destination_folder)
    progress_bar.update(os.path.getsize(file_path))

tqdm使用起来非常简单,只需要将shutil复制文件的过程放在with语句块中,同时在with块的外面加上tqdm()即可。然后,定义进度条起始值为0,总量为待复制的文件大小,单位为字节。

四、批量复制指定文件类型

有时候我们需要从一个文件夹中找出特定类型的文件,然后将它们复制到指定位置。下面是一个使用os模块和shutil库实现该功能的代码示例:

import os
import shutil

source_dir = '/path/to/source_dir'
file_ext = '.txt'
target_dir = '/path/to/target_dir'

for root, dirs, files in os.walk(source_dir):
    for file_name in files:
        if file_name.endswith(file_ext):
            source_file = os.path.join(root, file_name)
            shutil.copy(source_file, target_dir)

上述代码可以从“source_dir”目录中找到所有扩展名为“.txt”的文件,并将它们复制到“target_dir”目录中。

五、使用rsync命令进行文件同步

rsync是Linux下非常有用的文件同步工具,可以快速、可靠地实现文件的复制和同步,尤其适合大量数据的备份工作。通过Python的subprocess库,我们可以在Python脚本中调用rsync命令来实现文件同步和传输,代码如下:

import subprocess

source_dir = 'user@remote_host:/path/to/source_dir'
target_dir = '/path/to/target_dir'

subprocess.call('rsync -avz {} {}'.format(source_dir, target_dir), shell=True)

上述代码将一个远程主机上的“source_dir”目录同步到本地的“target_dir”目录下。

六、使用ftp进行文件传输

如果需要从一个FTP服务器中下载文件,Python内置的ftplib库可以满足需求。下面是一个使用ftplib库下载FTP文件的代码示例:

from ftplib import FTP

ftp = FTP('ftp.example.com')
ftp.login('username', 'password')

remote_file = '/path/to/remote_file'
local_file = '/path/to/local_file'

with open(local_file, 'wb') as f:
    ftp.retrbinary('RETR {}'.format(remote_file), f.write)
    
ftp.quit()

上述代码将FTP服务器上的“remote_file”文件下载到本地的“local_file”文件中。

总结

以上是Python在Linux下进行文件复制操作的几种方法,各有优缺点。根据具体需求可以选择最合适的方法进行实现。