6.23 操作Ftp:ftplib
6.23.1 ftplib简介
ftplib是Python的标准库之一,用于FTP(文件传输协议)的客户端操作。FTP是一种用于在网络上传输文件的标准网络协议。ftplib模块提供了一个高级的API,使得使用FTP协议变得相对简单。
以下是ftplib模块中的一些主要功能:
连接到FTP服务器
:使用ftplib.FTP()函数可以创建一个FTP对象,然后使用该对象的connect()方法连接到FTP服务器。
登录到FTP服务器
:使用login()方法提供用户名、密码和可选的远程服务器名称,登录到FTP服务器。
列出FTP服务器上的文件和目录
:使用dir()或cwd()方法可以列出FTP服务器上的文件和目录。
下载文件
:使用retrieve()或retrbinary()方法可以下载FTP服务器上的文件。
上传文件
:使用store()或storbinary()方法可以上传文件到FTP服务器。
改变工作目录
:使用cwd()方法可以改变当前的工作目录。
退出FTP服务器
:使用quit()方法可以退出FTP会话。
6.23.2 连接、登录和退出FTP服务器
from icecream import ic
from ftplib import FTP
ftp = FTP() # 设置ftp对象
ftp.set_debuglevel(2) # 打开调试级别2,显示详细信息
ftp.connect("192.168.100.202", 21) # 连接ftp服务器
ftp.login("share", "1") # 登录ftp服务器,需要用户名,密码
ftp.getwelcome() # 打印出欢迎信息
try:
ftp.quit() # 发送QUIT命令给服务器并关闭掉连接。这是一个比较`缓和`的关闭连接方式,但是如果服务器对QUIT命令返回错误时,会抛出异常。
ic('退出ftp服务器')
except:
ftp.close() # 单方面的关闭掉连接,不应该用在已经关闭的连接之后,例如不应用在quit()之后。
ic('关闭ftp服务器')
get ‘220 Microsoft FTP Service\n’
resp ‘220 Microsoft FTP Service’
cmd ‘USER share’
put ‘USER share\r\n’
get ‘331 Password required\n’
resp ‘331 Password required’
cmd ‘PASS *’
put ‘PASS *\r\n’
get ‘230 User logged in.\n’
resp ‘230 User logged in.’
welcome ‘220 Microsoft FTP Service’
cmd ‘QUIT’
put ‘QUIT\r\n’
get ‘221 Goodbye.\n’
resp ‘221 Goodbye.’
22:01:48|> ‘退出ftp服务器’
关于调试级别:
0:不输出任何日志,此为默认
1:打印命令和响应,但不是主体文本等。
2:显示所有详细日志
6.23.3 列出FTP服务器文件和目录
from ftplib import FTP
ftp = FTP() # 设置ftp对象
ftp.connect("192.168.100.202", 21) # 连接ftp服务器
ftp.login("share", "1") # 登录ftp服务器,需要用户名,密码
files = ftp.nlst('Logs2') # 获取目标目录中所有的文件,包括文件夹
print(files)
ftp.cwd(r'logs\test') # 设置FTP当前操作的路径
print('*' * 60)
ftp.dir() # 显示当前目录信息
ftp.quit()
[‘log.txt’, ‘log.txt.lnk’, ‘loglink.txt’, ‘log_hard.txt’, ‘Test’]
09-03-23 04:26PM 0 test.txt
6.23.4 从FTP服务器上下载和上传文件
from ftplib import FTP
ftp = FTP() # 设置ftp对象
ftp.connect("192.168.100.202", 21) # 连接ftp服务器
ftp.login("share", "1") # 登录ftp服务器,需要用户名,密码
resp = ftp.sendcmd('OPTS utf8') # 检测编码格式,否则上传中文文件名会出现乱码
if resp.startswith('200'):
encoding = 'utf-8'
ftp.encoding = encoding
filename = r'E:\Syncdisk\标准文档格式说明.docx'
file_handel = open(filename, "rb")
fn = '标准文档格式说明.docx'
ftp.storbinary('STOR %s' % fn, file_handel) # 上传目标文件
file_handle = open('文档.docx', "wb").write # 以写模式在本地打开文件
ftp.retrbinary("RETR %s" % fn, file_handle) # 下载FTP文件
ftp.quit()
6.23.5 其它的一些操作
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。