全栈工程师开发手册 (作者:栾鹏)
python中ftp操作:
ftp=FTP() #设置变量 ftp.set_debuglevel(2) #打开调试级别2,显示详细信息 ftp.connect(“IP”,”port”) #连接的ftp sever和端口 ftp.login(“user”,”password”)#连接的用户名,密码 print ftp.getwelcome() #打印出欢迎信息 ftp.cmd(“xxx/xxx”) #更改远程目录 bufsize=1024 #设置的缓冲区大小 filename=”filename.txt” #需要下载的文件 file_handle=open(filename,”wb”).write #以写模式在本地打开文件 ftp.retrbinaly(“RETR filename.txt”,file_handle,bufsize) #接收服务器上文件并写入本地文件 ftp.set_debuglevel(0) #关闭调试模式 ftp.quit #退出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文件
前提条件是你已经在当前电脑或远程服务器开通了ftp功能。
这里在本机上调试,目标主机也是本机。ftp信息如下表
主机地址192.168.8.102,端口号使用默认21端口,开启了匿名登录。所以在代码中登陆ftp账号密码为空。
ftp所需要的库已经集成在了python系统中
代码语言:javascript复制#coding:utf-8
#ftp演示,首先要在本机或远程服务器开启ftp功能
import sys,os,ftplib,socket
print("=====================FTP客户端=====================");
HOST = '192.168.8.102' #FTP主机
user = "username"
password = "pwd"
buffer_size = 8192
#连接登陆
def connect():
try:
ftp = ftplib.FTP(HOST)
ftp.login()#登录,参数user,password,acct均是可选参数,
#f.login(user="user", passwd="password")
return ftp
except (socket.error,socket.gaierror):
print("FTP登陆失败,请检查主机号、用户名、密码是否正确")
sys.exit(0)
print('已连接到: "%s"' % HOST)
#中断并退出
def disconnect(ftp):
ftp.quit() #FTP.close():单方面的关闭掉连接。FTP.quit():发送QUIT命令给服务器并关闭掉连接
#上传文件
def upload(ftp, filepath):
f = open(filepath, "rb")
file_name = os.path.split(filepath)[-1]
try:
ftp.storbinary('STOR %s'%file_name, f, buffer_size)
print('成功上传文件: "%s"' % file_name)
except ftplib.error_perm:
return False
return True
#下载文件
def download(ftp, filename):
f = open(filename,"wb").write
try:
ftp.retrbinary("RETR %s"%filename, f, buffer_size)
print('成功下载文件: "%s"' % filename)
except ftplib.error_perm:
return False
return True
#获取目录下文件或文件夹想详细信息
def listinfo(ftp):
ftp.dir()
#查找是否存在指定文件
def find(ftp,filename):
ftp_f_list = ftp.nlst() #获取目录下文件、文件夹列表
if filename in ftp_f_list:
return True
else:
return False
def main():
ftp = connect() #连接登陆ftp
dirpath = 'lp' #目录,不能使用lp/lp1这种多级创建,而且要保证你的ftp目录,右键属性不能是只读的
try: ftp.mkd(dirpath) #新建远程目录
except ftplib.error_perm:
print("目录已经存在或无法创建")
try:ftp.cwd(dirpath) #重定向到指定路径
except ftplib.error_perm:
print('不可以进入目录:"%s"' % dirpath)
print(ftp.pwd()) #返回当前所在位置
try: ftp.mkd("dir1") #在当前路径下创建dir1文件夹
except ftplib.error_perm:
print("目录已经存在或无法创建")
upload(ftp,"D:/test.txt") #上传本地文件
filename="test1.txt"
ftp.rename("test.txt", filename) #文件改名
if os.path.exists(filename): #判断本地文件是否存在
os.unlink(filename) #如果存在就删除
download(ftp,filename) #下载ftp文件
listinfo(ftp) #打印目录下每个文件或文件夹的详细信息
files = ftp.nlst() #获取路径下文件或文件夹列表
print(files)
ftp.delete(filename) #删除远程文件
ftp.rmd("dir1") #删除远程目录
ftp.quit() #退出
if __name__ == '__main__':
main()