详解Python下ftp上传文件linux服务器


Posted in Python onJune 21, 2018

模块介绍:

from ftplib import FTP
 ftp = FTP() #设置变量
 ftp.set_debuglevel(2) #打开调试级别2 显示详细信息
 ftp.connect("IP", "port") #连接ftp, IP和端口
 ftp.log("user", "password") #连接的用户名、密码
 
 ftp.cwd(pathname) #设置FTP当前操作的路径
 ftp.dir() #显示目录下的文件信息
 ftp.nlst() #获取目录下的文件
 ftp.mkd(pathname) #新建远程目录
 ftp.pwd() #返回当前所在位置
 ftp.rmd(dirname) #删除远程目录
 ftp.delete(filename) #删除远程文件
 ftp.rename(from_name, to_name) #修改文件名
 ftp.storbinaly("STOR filename.txt", file_handel, bufsize) # 上传目标文件
 ftp.retrbinaly("RETR filename.txt", file_handel, bufsize) # 上传FTP文件

功能实现:

ftp.dir() 能显示目录下的文件信息,考虑到要分别对文件夹个数和文件数目进行统计,文件夹下存在文件夹和文件嵌套;将dir()后的目录信息放入列表,对列表进行操作;进入子文件夹后进行递归调用操作。

# -*- coding: utf-8 -*-
 
 from ftplib import FTP
 
 ftp = FTP()
 ftp.connect('132.121.xx.xxx', 'xx909')
 ftp.login('crmyun_xxx', 'wyjjjjxJ')
 sum1 = 0
 sum2 = 0
 value = 0
 
 def search_file(start_dir):
  ftp.cwd(start_dir)
  print ftp.pwd()
  dir_res = []
  ftp.dir('.', dir_res.append) #对当前目录进行dir(),将结果放入列表
  for i in dir_res:
   if i.startswith("d"):
    global sum1 
    sum1 += 1
    search_file(ftp.pwd()+"/"+i.split(" ")[-1])
    ftp.cwd('..')
   else:
    global sum2, value
    sum2 += 1
    val = i.split(" ")[-1]
    value += ftp.size(val)
    if ftp.pwd().endswith('/'):    
 #    print ftp.pwd()+val+"  "+str(ftp.size(val))+" B" #打印出每个文件路径和大小
     pass
    else:    
 #    print ftp.pwd()+"/"+val+"  "+str(ftp.size(val))+" B"
     pass
 def sum_file(file_path):
  search_file(file_path)
  print "folder number is "+str(sum1)+", file number is "+str(sum2)+", Totle size is "+str(value)+" B"
  
 
 if __name__ == '__main__':
  sum_file("/apps/crmyun/crmyun_755")

展示结果:

详解Python下ftp上传文件linux服务器

完整上传程序

Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件,函数列举如下

ftp登陆连接
from ftplib import FTP   #加载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.quit()与FTP.close()的区别

FTP.quit():发送QUIT命令给服务器并关闭掉连接。这是一个比较“缓和”的关闭连接方式,但是如果服务器对QUIT命令返回错误时,会抛出异常。

FTP.close():单方面的关闭掉连接,不应该用在已经关闭的连接之后,例如不应用在FTP.quit()之后。

例:下载、上传文件

# coding: utf-8
from ftplib import FTP
import time
import tarfile
import os
# !/usr/bin/python
# -*- coding: utf-8 -*-

from ftplib import FTP

def ftpconnect(host, username, password):
 ftp = FTP()
 # ftp.set_debuglevel(2)
 ftp.connect(host, 21)
 ftp.login(username, password)
 return ftp

#从ftp下载文件
def downloadfile(ftp, remotepath, localpath):
 bufsize = 1024
 fp = open(localpath, 'wb')
 ftp.retrbinary('RETR ' + remotepath, fp.write, bufsize)
 ftp.set_debuglevel(0)
 fp.close()

#从本地上传文件到ftp
def uploadfile(ftp, remotepath, localpath):
 bufsize = 1024
 fp = open(localpath, 'rb')
 ftp.storbinary('STOR ' + remotepath, fp, bufsize)
 ftp.set_debuglevel(0)
 fp.close()

if __name__ == "__main__":
 ftp = ftpconnect("113.105.139.xxx", "ftp***", "Guest***")
 downloadfile(ftp, "Faint.mp4", "C:/Users/Administrator/Desktop/test.mp4")
 #调用本地播放器播放下载的视频
 os.system('start "C:\Program Files\Windows Media Player\wmplayer.exe" "C:/Users/Administrator/Desktop/test.mp4"')
 uploadfile(ftp, "C:/Users/Administrator/Desktop/test.mp4", "test.mp4")

 ftp.quit()
Python 相关文章推荐
python简单实现旋转图片的方法
May 30 Python
Python语言实现机器学习的K-近邻算法
Jun 11 Python
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
Sep 21 Python
Python3安装Pymongo详细步骤
May 26 Python
python在ubuntu中的几种安装方法(小结)
Dec 08 Python
Python测试网络连通性示例【基于ping】
Aug 03 Python
python pyheatmap包绘制热力图
Nov 09 Python
python实现抖音点赞功能
Apr 07 Python
Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境
Apr 08 Python
pytorch加载语音类自定义数据集的方法教程
Nov 10 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
Nov 17 Python
Python基础之常用库常用方法整理
Apr 30 Python
Python爬取数据并写入MySQL数据库的实例
Jun 21 #Python
python实现黑客字幕雨效果
Jun 21 #Python
python实现内存监控系统
Mar 07 #Python
Python之csv文件从MySQL数据库导入导出的方法
Jun 21 #Python
python 从csv读数据到mysql的实例
Jun 21 #Python
OPENCV去除小连通区域,去除孔洞的实例讲解
Jun 21 #Python
python读取文本绘制动态速度曲线
Jun 21 #Python
You might like
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
2015/10/08 PHP
深入浅析PHP7.0新特征(五大新特征)
2015/10/29 PHP
Yii 2.0在Grid中格式化时间方法示例
2017/06/06 PHP
php的单例模式及应用场景详解
2021/02/27 PHP
jQuery 幻灯片插件(带缩略图功能)
2011/01/24 Javascript
js前台判断开始时间是否小于结束时间
2012/02/23 Javascript
JQuery验证jsp页面属性是否为空(实例代码)
2013/11/08 Javascript
兼容所有浏览器的js复制插件Zero使用介绍
2014/03/19 Javascript
JS替换字符串中字符即替换全部而不是第一个
2014/06/04 Javascript
动态载入js提高网页打开速度的方法
2014/07/04 Javascript
深入分析原生JavaScript事件
2014/12/29 Javascript
常用的JQuery函数及功能小结
2016/03/24 Javascript
详解jQuery lazyload 懒加载
2016/12/19 Javascript
Bootstrap模态窗口源码解析
2017/02/08 Javascript
Bootstrap列表组学习使用
2017/02/09 Javascript
js实现日历与定时器
2017/02/22 Javascript
使用D3.js制作图表详解
2017/08/13 Javascript
jQuery使用动画队列自定义动画操作示例
2018/06/16 jQuery
vuejs 动态添加input框的实例讲解
2018/08/24 Javascript
JavaScript读写二进制数据的方法详解
2018/09/09 Javascript
axios对请求各种异常情况处理的封装方法
2018/09/25 Javascript
JS判断浏览器类型与操作系统的方法分析
2020/04/30 Javascript
[48:30]LGD vs infamous Supermajor小组赛D组 BO3 第一场 6.3
2018/06/04 DOTA
python线程锁(thread)学习示例
2013/12/04 Python
python实现带错误处理功能的远程文件读取方法
2015/04/29 Python
Python基于DES算法加密解密实例
2015/06/03 Python
Python统计单词出现的次数
2018/04/04 Python
Python网络编程之TCP套接字简单用法示例
2018/04/09 Python
python协程gevent案例 爬取斗鱼图片过程解析
2019/08/27 Python
python 魔法函数实例及解析
2019/09/25 Python
pytorch动态网络以及权重共享实例
2020/01/06 Python
就业自荐书
2013/12/05 职场文书
制药工程专业毕业生推荐信
2013/12/24 职场文书
公司开会通知
2015/04/20 职场文书
关于党风廉政建设宣传教育月的活动总结!
2019/08/08 职场文书
MySQL中连接查询和子查询的问题
2021/09/04 MySQL