详解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实现通过shelve修改对象实例
Sep 26 Python
python 函数传参之传值还是传引用的分析
Sep 07 Python
python 编码规范整理
May 05 Python
使用Python更换外网IP的方法
Jul 09 Python
python对于requests的封装方法详解
Jan 03 Python
python实现定时压缩指定文件夹发送邮件
Dec 22 Python
django项目简单调取百度翻译接口的方法
Aug 06 Python
查看Python依赖包及其版本号信息的方法
Aug 13 Python
python多线程案例之多任务copy文件完整实例
Oct 29 Python
python实现在一个画布上画多个子图
Jan 19 Python
解决TensorFlow模型恢复报错的问题
Feb 06 Python
Python 格式化打印json数据方法(展开状态)
Feb 27 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
Re:从零开始的异世界生活 第2季 开播啦
2020/07/24 日漫
PHP提取数据库内容中的图片地址并循环输出
2010/03/21 PHP
ThinkPHP框架实现FTP图片上传功能示例
2019/04/08 PHP
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
JavaScript 大数据相加的问题
2011/08/03 Javascript
jquery操作复选框checkbox的方法汇总
2015/02/05 Javascript
JavaScript获取表格(table)当前行的值、删除行、增加行
2015/07/03 Javascript
jQuery实现TAB选项卡切换特效简单演示
2016/03/04 Javascript
自动化测试读写64位操作系统的注册表
2016/08/15 Javascript
AngularJS中的Promise详细介绍及实例代码
2016/12/13 Javascript
React通过父组件传递类名给子组件的实现方法
2017/11/13 Javascript
如何利用ES6进行Promise封装总结
2019/02/11 Javascript
了解javascript中let和var及const关键字的区别
2019/05/24 Javascript
Vue学习之组件用法实例详解
2020/01/06 Javascript
vue中实现动态生成二维码的方法
2020/02/21 Javascript
vue 动态给每个页面添加title、关键词和描述的方法
2020/08/28 Javascript
[09:37]2018DOTA2国际邀请赛寻真——不懈追梦的Team Serenity
2018/08/13 DOTA
python if not in 多条件判断代码
2016/09/21 Python
利用Python如何生成hash值示例详解
2017/12/20 Python
Python 实现使用dict 创建二维数据、DataFrame
2018/04/13 Python
WxPython建立批量录入框窗口
2019/02/27 Python
Python骚操作之动态定义函数
2019/03/26 Python
python儿童学游戏编程知识点总结
2019/06/03 Python
python3.6连接mysql数据库及增删改查操作详解
2020/02/10 Python
深入研究HTML5实现图片压缩上传功能
2016/03/25 HTML / CSS
HTML5 WebSocket实现点对点聊天的示例代码
2018/01/31 HTML / CSS
享誉全球的多元化时尚精品购物平台:Farfetch发发奇(支持中文)
2017/08/08 全球购物
车贷收入证明范本
2014/01/09 职场文书
幼儿园新学期寄语
2014/01/18 职场文书
《欢乐的泼水节》教学反思
2014/04/22 职场文书
会展策划与管理专业求职信
2014/06/09 职场文书
个人求职自荐信范文
2014/06/20 职场文书
国际贸易毕业生自荐书
2014/06/22 职场文书
债务纠纷委托书
2014/08/30 职场文书
如何让vue长列表快速加载
2021/03/29 Vue.js
Python时间操作之pytz模块使用详解
2022/06/14 Python