使用Python玩转ftplib库:实现ftp文件传输自动化全攻略

张开发
2026/4/8 3:33:55 15 分钟阅读

分享文章

使用Python玩转ftplib库:实现ftp文件传输自动化全攻略
使用Python玩转ftplib库实现ftp文件传输自动化全攻略大家好在日常工作中都会使用到ftp功能用于上传和下载文件等本章主要介绍Python的标准库ftplib来实现FTP文件传输帮助我们实现ftp自动化。01 ftplib库核心函数速查表1️⃣ 连接与登录​​​​#非加密传输from ftplib import FTP# 创建FTP对象ftp FTP()# 连接服务器ftp默认端口为21ftp.connect(host168.0.0.1, port21)# 登录认证输入正确的用户名和密码ftp.login(useryour_username, passwdyour_password)# 操作完成后安全退出连接ftp.quit()#使用FTPS加密连接加密传输防止数据泄露。from ftplib import FTP_TLSftps FTP_TLS(secure.example.com)ftps.login(useradmin, passwdsecret)ftps.prot_p() # 启用加密数据通道说明通过FTP()创建对象connect方法指定服务器地址和端口建立连接login方法输入用户名和密码完成认证操作结束后用quit方法关闭连接避免资源浪费。2️⃣ 目录操作​​​​​​​# 获取当前所在目录current_dir ftp.pwd()print(f当前目录: {current_dir})# 切换到目标目录ftp.cwd(/remote/files)# 在服务器上创建新目录ftp.mkd(new_folder)# 删除空目录注意目录必须为空才能删除成功ftp.rmd(old_folder)3️⃣ 文件上传下载1上传文件​​​​​​​# 以二进制模式上传文件适用于图片、压缩包等非文本文件with open(local_file.zip, rb) as f:ftp.storbinary(STOR remote_file.zip, f)# 以ASCII模式上传文本文件如txtloghtmlxml等保证文本格式正确with open(readme.txt, r) as f:ftp.storlines(STOR readme.txt, f)说明STOR remote_file.zip中的STOR是标准化写法后面跟的是要上传的文件。2下载文件​​​​​​​# 以二进制模式下载文件将服务器文件保存到本地第二个参事室回调函数with open(local.zip, wb) as f:ftp.retrbinary(RETR remote.zip, f.write)#传输大文件时合理设置缓冲区大小能提升传输效率# 设置缓冲区大小为1MB可根据实际情况调整BUFFER_SIZE 1024 * 1024# 使用设置好的缓冲区大小下载大文件with open(large_file.iso, wb) as f:ftp.retrbinary(RETR large_file.iso, f.write, blocksizeBUFFER_SIZE)# 以文本模式下载文件将服务器文件保存到本地with open(local.txt, wb) as f:ftp.retrlines(RETR remote.txt, f.write)说明STOR remote_file.zip中的STOR是标准化写法后面跟的是要上传的文件。在实际使用中下载文本文件时可能会遇到转换换行符失败的情况多行的文件下载后变为了一行。此时可以自己重写回调函数在每一行末尾加上换行符如下​​​​​​​def write(line):f.write(line \n)# 以文本模式下载文件将服务器文件保存到本地 回调函数为自己定义的write函数with open(local.txt, wb) as f:ftp.retrlines(RETR remote.txt, write)4️⃣ 文件管理对服务器上的文件进行管理这些函数能满足你的常见需求​​​​​​​# 删除远程服务器上的指定文件ftp.delete(obsolete_file.txt)# 重命名文件方便文件整理ftp.rename(old_name.txt, new_name.txt)# 获取文件大小了解文件占用空间size ftp.size(large_file.iso)print(f文件大小: {size} 字节)5️⃣ 目录列表查看服务器目录内容这几种方式能让你快速获取文件信息​​​​​​​# 获取简洁的文件列表files ftp.nlst()print(目录内容:, files)# 获取详细文件列表直接打印到控制台ftp.dir()# 解析详细列表获取文件名和类型ftp.mlsd()6️⃣ 其他操作​​​​​​​# 设置编码ftp.encoding utf-8# 设置传输模式ftp.set_pasv(True) # 被动模式推荐# 发送自定义命令response ftp.sendcmd(HELP) # 获取服务器支持的命令print(服务器支持命令:, response)# 获取文件修改时间mod_time ftp.sendcmd(MDTM config.ini)print(f最后修改时间: {mod_time[4:]})# 设置超时时间ftp FTP(timeout30)# 异常处理示例出现登录失败等问题时可添加重试逻辑try:ftp.login(user, passwd)except ftplib.error_temp as e:print(f登录失败: {e})02实战案例案例 1自动备份数据到FTP​​​​​​​import osfrom datetime import datetimefrom ftplib import FTPdef backup_site(local_dir, ftp_dir):# 创建带时间戳的备份目录方便区分不同时间的备份timestamp datetime.now().strftime(%Y%m%d_%H%M)backup_dir f{ftp_dir}/backup_{timestamp}ftp FTP(host地址)ftp.login(user, password)# 在服务器上创建备份目录ftp.mkd(backup_dir)ftp.cwd(backup_dir)# 遍历本地目录上传所有文件for file in os.listdir(local_dir):local_path os.path.join(local_dir, file)if os.path.isfile(local_path):with open(local_path, rb) as f:ftp.storbinary(fSTOR {file}, f)print(f备份完成至: {backup_dir})ftp.quit()backup_site(dir1, /dir2)案例 2定时下载日志文件自动获取服务器日志便于后续分析和排查问题​​​​​​​import scheduleimport timefrom ftplib import FTPdef download_logs():ftp FTP(host地址)ftp.login(user, password)ftp.cwd(/logs)# 只下载今日日志精准获取所需数据today time.strftime(%Y%m%d)for file in ftp.nlst():if today in file:with open(file, wb) as f:ftp.retrbinary(fRETR {file}, f.write)ftp.quit()# 设置每天凌晨00:05执行下载任务schedule.every().day.at(00:05).do(download_logs)while True:schedule.run_pending()time.sleep(60)

更多文章