【Python】FTP 的搭建及常用操作


安装三方包

pip install pyftpdlib

1、搭建FTP

 搭建简单的FTP服务器

# 在本地需要创建FTP的目录执行命令
python -m pyftpdlib
i 指定IP地址(默认为本机的IP地址)

p 指定端口(默认为2121)

w 写权限(默认为只读)

d 指定目录 (默认为当前目录)

u 指定用户名登录

P 设置登录密码
其他参数

  运行结果

局域网搭建FTP环境

# -*- coding:utf-8 -*-
# pyftpdlib 搭建ftp服务端
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers  import FTPHandler
from pyftpdlib.servers import FTPServer

class ftp_tools:
    port = 2121
    user = "admin"
    pwd = "12345"

    # 创建ftp服务端
    def creat_ftp_server(self):
        # 实例化DummyAuthorizer来创建ftp用户
        authorizer = DummyAuthorizer()
        # 参数:用户名,密码,目录,权限[见拓展部分服务权限]
        authorizer.add_user(self.user, self.pwd, r'D:\FTP', perm='elradfmwMT')
        handler = FTPHandler
        handler.authorizer = authorizer
        # 参数:IP,端口,handler
        server = FTPServer(('0.0.0.0', self.port), handler)  # 设置为0.0.0.0为本机的IP地址
        server.serve_forever()


if __name__ == "__main__":
    ftp_tools().creat_ftp_server()

  运行结果:

2、连接FTP

连接FTP

    # 连接ftp
    def conn_ftp(self):
        ftp = FTP()
        # 连接ftp
        ftp.connect(host=self.host, port=self.port, timeout=10)
        # 登录ftp
        ftp.login(user=self.user, passwd=self.pwd)
        # 关闭ftp
        ftp.close()

3、上传和下载

从本地上传文件到FTP

    def uploadfile(ftppath, localpath):
        ftp = FTP()
        # 连接ftp
        ftp.connect(host=self.host, port=self.port, timeout=10)
        # 登录ftp
        ftp.login(user=self.user, passwd=self.pwd)
        # 设置的缓冲区大小
        bufsize = 1024
        fp = open(localpath, 'rb')
        # 二进制存储器
        ftp.storbinary('STOR ' + ftppath, fp, bufsize)
        # 参数为0,关闭调试模式
        ftp.set_debuglevel(0)
        # 关闭文件并退出ftp
        fp.close()
        ftp.quit()    

从FTP下载文件到本地

    def downloadfile(ftppath, localpath):
        ftp = FTP()
        # 连接ftp
        ftp.connect(host=self.host, port=self.port, timeout=10)
        # 登录ftp
        ftp.login(user=self.user, passwd=self.pwd)
        # 设置的缓冲区大小
        bufsize = 1024
        fp = open(localpath, 'wb')
        # 二进制文件
        ftp.retrbinary('RETR ' + ftppath, fp.write, bufsize)
        # 参数为0,关闭调试模式
        ftp.set_debuglevel(0)
      # 关闭文件并退出ftp
        fp.close()
     ftp.quit()

拓展


perm 权限参数解释

读取权限:

  "e" =更改目录(CWD,CDUP命令)
  
  "l" =列表文件(LIST,NLST,STAT,MLSD,MLST,SIZE命令)

  "r" =从服务器检索文件(RETR命令)

写入权限:

  "a" =将数据追加到现有文件(APPE命令)

  "d" =删除文件或目录(DELE,RMD命令)

  "f" =重命名文件或目录(RNFR,RNTO命令)

  "m" =创建目录(MKD命令)

  "w" =将文件存储到服务器(STOR,STOU命令)

  "M" =更改文件模式/权限(SITE CHMOD命令)

  "T" =更改文件修改时间(SITE MFMT命令)

 

ftp常用函数释义

from ftplib import FTP                          #加载ftp模块
ftp=FTP()               #实例化对象 ftp.set_debuglevel(2)               #打开调试级别2,显示详细信息 ftp.connect("IP","port")               #连接ftp的ip和端口 ftp.login("user","password")               #连接ftp的用户名和密码 print(ftp.getwelcome())               #打印出欢迎信息 ftp.cmd("xxx/xxx")               #进入远程目录 bufsize=1024                #设置的缓冲区大小 filename="xxxx.txt"                  #需要下载的文件 file_handle=open(filename,"wb").write             #以写模式在本地打开文件 ftp.set_debuglevel(0)               #关闭调试模式 ftp.quit()                #退出ftp (发送命令并关闭连接,出现错误会抛异常) ftp.close()                            #关闭ftp (单方面强制关闭ftp)
ftp.cwd(pathname)               #设置FTP当前操作的路径 ftp.dir()               #显示目录下所有目录信息 ftp.nlst()                #获取目录下的文件 ftp.mkd(pathname)                #新建远程目录 ftp.pwd()               #返回当前所在位置 ftp.rmd(dirname)                #删除远程目录 ftp.delete(filename)                #删除远程文件 ftp.rename(fromname, toname)                  #将fromname修改名称为toname。 ftp.storbinaly("STOR filename.txt",file_handel,bufsize) #上传目标文件 ftp.retrbinary("RETR filename.txt",file_handel,bufsize) #下载FTP文件