一、复制文件的基本方法
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下进行文件复制操作的几种方法,各有优缺点。根据具体需求可以选择最合适的方法进行实现。