Python连接ftp

179 阅读2分钟

ftplib介绍

一些取数的场景会用到python连接ftp,本文总结python连接ftp的基本用法。

ftplib 是 Python 中用于操作 FTP(File Transfer Protocol)的库。它提供了一组丰富的的方法和接口,可以方便地与 FTP 服务器进行通信,实现文件的上传、下载、删除、列表等操作。

以下是 ftplib 中的一些常用方法和类:

  1. FTP 类:代表一个 FTP 连接对象,可以使用它来连接到 FTP 服务器、登录、退出等。
  2. FTP.login() 方法:用于登录 FTP 服务器,可以指定用户名和密码。
  3. FTP.logout() 方法:用于退出 FTP 服务器。
  4. FTP.pwd() 方法:显示当前目录。
  5. FTP.cwd() 方法:用于切换当前工作目录。
  6. FTP.dir() 方法:用于列出当前目录下的文件和文件夹。
  7. FTP.storbinary() 方法:用于将文件上传到 FTP 服务器。
  8. FTP.retrbinary() 方法:用于从 FTP 服务器下载文件。
  9. FTP.delete() 方法:用于删除 FTP 服务器上的文件。
  10. FTP.rename() 方法:用于重命名 FTP 服务器上的文件。

ftplib的使用

废话不多说,直接上代码:

import ftplib
ip = 'ftp_ip'
port = ftp_port
name = 'username'
password = '******'

# 登录
ftp = ftplib.FTP()
ftp.connect(ip, port)
ftp.login(name, password)

# 获取文件列表
doclist = self.ftp.nlst(path)

# 重命名
ftp.rename(from_name, to_name)

# 获取文件大小
docsize = ftp.size(addr)

# 上传文件(二进制的形式)
file_handler = open(src_addr, 'rb')
try:
    self.ftp.cwd(dir_name)
    self.ftp.storbinary('STOR %s' % base_name, file_handler, bufsize)
except:
    traceback.print_exc()
    raise DataUploadError("File %s upload error!" % src_addr)
finally:
    file_handler.close()
    
# 上传文件(非二进制形式)
file_handler = open(src_addr, 'r')
try:
    self.ftp.storlines('STOR %s' % dst_addr, file_handler)
except:
    traceback.print_exc()
    raise DataUploadError("File %s upload error!" % src_addr)
finally:
    file_handler.close()
    
# 下载文件(二进制的形式)
file_handler = open(dst_addr, 'wb')
try:
    self.ftp.retrbinary('RETR %s' % src_addr, file_handler.write, bufsize)
except Exception as e:
    traceback.print_exc()
    raise FileDownloadError("%s download error! [ErrorMsg]%s" % (src_addr, e))
finally:
    file_handler.close()
    
# 下载文件(非二进制的形式)
file_handler = open(dst_addr, 'w')
try:
    self.ftp.storlines('RETR %s' % src_addr, file_handler.write, bufsize)
except Exception as e:
    traceback.print_exc()
    raise FileDownloadError("%s download error! [ErrorMsg]%s" % (src_addr, e))
finally:
    file_handler.close()
    
# 关闭连接
ftp.close()

总结:

  • 基于Linux系统的ftp默认的根目录的地址和基于Windows系统的默认地址是不一样的,结合pwd()和cwd()来处理;
  • 文件的上传下载时,分为二进制编码和非二进制编码两种,建议用二进制形式来读写文件,防止乱码;
  • 在完成传输时,一定要记得关闭连接。