详解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从sqlite读取并显示数据的方法
May 08 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
Nov 30 Python
Python:Scrapy框架中Item Pipeline组件使用详解
Dec 27 Python
python距离测量的方法
Mar 06 Python
手把手教你如何安装Pycharm(详细图文教程)
Nov 28 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
Jan 15 Python
使用python的pexpect模块,实现远程免密登录的示例
Feb 14 Python
python交互界面的退出方法
Feb 16 Python
通过PYTHON来实现图像分割详解
Jun 26 Python
Python实现自定义读写分离代码实例
Nov 16 Python
python 项目目录结构设置
Feb 14 Python
Django 构建模板form表单的两种方法
Jun 14 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
让你的PHP同时支持GIF、png、JPEG
2006/10/09 PHP
PHP通过加锁实现并发情况下抢码功能
2016/08/10 PHP
PHP聊天室简单实现方法详解
2018/12/08 PHP
PHP命名空间简单用法示例
2018/12/28 PHP
Firefox+FireBug使JQuery的学习更加轻松愉快
2010/01/01 Javascript
JSQL  一个 web DB 的封装
2010/05/05 Javascript
图片img的src不变让浏览器重新加载实现方法
2013/03/29 Javascript
JavaScript:new 一个函数和直接调用函数的区别分析
2013/07/10 Javascript
Javascript 浮点运算的问题分析与解决方法
2013/08/27 Javascript
node.js中的fs.link方法使用说明
2014/12/15 Javascript
javascript鼠标滑动评分控件完整实例
2015/05/13 Javascript
AngularJS基础 ng-if 指令用法
2016/08/01 Javascript
详解Angular中$cacheFactory缓存的使用
2016/08/19 Javascript
浅谈Angular.js中使用$watch监听模型变化
2017/01/10 Javascript
js实现九宫格的随机颜色跳转
2017/02/19 Javascript
JavaScript字符串检索字符的方法
2017/06/23 Javascript
angular2 ng build部署后base文件路径问题详细解答
2017/07/15 Javascript
详解Javascript中new()到底做了些什么?
2018/03/29 Javascript
通过函数作用域和块级作用域看javascript的作用域链
2018/08/05 Javascript
JS实现滑动拼图验证功能完整示例
2020/03/29 Javascript
[08:07]DOTA2每周TOP10 精彩击杀集锦vol.8
2014/06/25 DOTA
[04:52]DOTA2亚洲邀请赛附加赛 TOP10精彩集锦
2015/01/29 DOTA
[06:53]2018DOTA2国际邀请赛寻真——为复仇而来的Newbee
2018/08/15 DOTA
用Python解析XML的几种常见方法的介绍
2015/04/09 Python
Python3 适合初学者学习的银行账户登录系统实例
2017/08/08 Python
python使用锁访问共享变量实例解析
2018/02/08 Python
学习python可以干什么
2019/02/26 Python
python使用协程实现并发操作的方法详解
2019/12/27 Python
Python手动或自动协程操作方法解析
2020/06/22 Python
彻底解决Python包下载慢问题
2020/11/15 Python
css3动画效果小结(推荐)
2016/07/25 HTML / CSS
土建专业大学生自荐信范文
2014/04/09 职场文书
美术兴趣小组活动总结
2014/07/07 职场文书
2014年企业员工工作总结
2014/12/09 职场文书
2015年置业顾问工作总结
2015/04/07 职场文书
基于Python实现西西成语接龙小助手
2022/08/05 Golang