python网络编程之文件下载实例分析


Posted in Python onMay 20, 2015

本文实例讲述了python网络编程之文件下载实现方法。分享给大家供大家参考。具体如下:

真是越看越喜欢python啊,想要了解它提供的http和ftp下载功能,原来是如此的简单。

1、相应模块

ftplib模块定义了FTP类和一些方法,用以进行客户端的ftp编程。我们可用python编写一个自已的ftp客户端程序,用于下载文件或镜像站点。如果想了解ftp协议的详细内容,请参考RFC959或是查看python帮助吧。

Urllib模块提供了非常高级的接口来从网络上抓取数据,主要使用到的是urlopen函数,跟open函数功能比较相似,这里我们要用到urlretrieve()函数来实现从http服务器上下载文件。

2、实例实现FTP下载和上传

from ftplib import FTP
import sys
def ftpdownload(path,file):
  ftp = FTP()
  ftp.set_debuglevel(2)
  #打开调试级别2,显示详细信息
  ftp.connect('**IP**')
  #连接ftp服务器
  ftp.login(user,password)
  #输入用户名和密码
  print ftp.getwelcome()
  #显示ftp服务器的欢迎信息
  ftp.cwd(path)
  #选择操作目录
  bufsize = 1024
  #设置缓冲区大小
  file_handler = open(file,'wb').write
  #以写模式在本地打开文件
  strBuffer = 'RETR ' + file
  ftp.retrbinary(strBuffer,file_handler,bufsize)
  #接收服务器上文件并写入本地文件
  ftp.set_debuglevel(0) #关闭调试
  ftp.quit() #退出ftp服务器
if __name__ == '__main__':
  path1 = 'download/test/'
  file1 = 'test1.rar'
  if len(sys.argv) == 3:
    try:
      ftpdownload(sys.argv[1],sys.argv[2])
      #命令行输入文件在ftp上的路径和文件名,    
    except IOError:
      print "please input the correct path and filename"
  else:
    ftpdownload(path1,file1)

上传文件非常类似,对应的上传函数storbinary。

from ftplib import FTP
import sys,os
def ftpdownload(path,file):
  ftp = FTP()
  ftp.set_debuglevel(2)
  ftp.connect('**IP**')
  ftp.login(user,password)
  print ftp.getwelcome()
  ftp.cwd(path)
  bufsize = 1024
  file_handler = open(file,'rb')
  #读方式打开上传文件
  strBuffer = 'RETR ' + file
  ftp.storbinary(strBuffer,file_handler,bufsize)
  #上传文件
  ftp.set_debuglevel(0) 
  ftp.quit()
if __name__ == '__main__':
  path1 = 'download/test/'
  file1 = '4.jpg'
  if len(sys.argv) == 3:
    try:
      ftpdownload(sys.argv[1],sys.argv[2])      
    except IOError:
      print "please input the correct path and filename"
  else:
    ftpdownload(path1,file1)

3、实例实现HTTP下载

http下载真的是超级简单,一个函数就搞定,这里通过传入要下载的地址下载文件,并计算下载时间,我想的感觉是比较笨的计算时间的方法,不知道谁有高招呢?

import urllib
import sys
def download(url):
  starttime = datetime.datetime.now()
  print 'download start time is %s'% starttime
  urllib.urlretrieve(url,'test.exe')
  #开始下载,test.exe为下载后保存的文件名
  endtime = datetime.datetime.now()
  print 'download end time is %s'% endtime  
  print 'you download the file use time %s s' % (endtime - starttime).seconds
if __name__ == '__main__':
  if len(sys.argv) == 2:
    try:
      download(sys.argv[1])
    except IOError:
      print 'url not found'
  else:
    download('http://www.python.org/')

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python实现人人网登录示例分享
Jan 19 Python
pyqt和pyside开发图形化界面
Jan 22 Python
OpenCV实现人脸识别
Apr 07 Python
python Pygame的具体使用讲解
Nov 03 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
Feb 07 Python
Python学习之Django的管理界面代码示例
Feb 10 Python
pycharm 取消默认的右击运行unittest的方法
Nov 29 Python
python opencv读mp4视频的实例
Dec 07 Python
python3实现微型的web服务器
Sep 03 Python
python实现查找所有程序的安装信息
Feb 18 Python
Python如何使用paramiko模块连接linux
Mar 18 Python
利用Python函数实现一个万历表完整示例
Jan 23 Python
Python中title()方法的使用简介
May 20 #Python
python中enumerate函数用法实例分析
May 20 #Python
python网络编程之数据传输UDP实例分析
May 20 #Python
在Python中使用swapCase()方法转换大小写的教程
May 20 #Python
python计算时间差的方法
May 20 #Python
python中sys.argv参数用法实例分析
May 20 #Python
python文件操作之目录遍历实例分析
May 20 #Python
You might like
Session保存到数据库的php类分享
2011/10/24 PHP
PHP实现上一篇下一篇的方法实例总结
2016/09/22 PHP
php提高脚本性能的4个技巧
2020/08/18 PHP
Javascript 构造函数 实例分析
2008/11/26 Javascript
javascript使用activex控件的代码
2011/01/27 Javascript
获取服务器传来的数据 用JS去空格的正则表达式
2012/03/26 Javascript
JS中for循序中延迟加载动态效果的具体实现
2013/08/18 Javascript
jquery fancybox ie6不显示关闭按钮的解决办法
2013/12/25 Javascript
2016年最热门的15 款代码语法高亮工具,美化你的代码
2016/01/06 Javascript
JavaScript实现左右下拉框动态增删示例
2017/03/09 Javascript
利用vueJs实现图片轮播实例代码
2017/06/03 Javascript
nginx部署访问vue-cli搭建的项目的方法
2018/02/12 Javascript
Koa日志中间件封装开发详解
2019/03/09 Javascript
详解vue-cli中使用rem,vue自适应
2019/05/06 Javascript
通过Nodejs搭建网站简单实现注册登录流程
2019/06/14 NodeJs
element实现合并单元格通用方法
2019/11/13 Javascript
使用python实现接口的方法
2017/07/07 Python
在Python函数中输入任意数量参数的实例
2019/07/16 Python
python 画图 图例自由定义方式
2020/04/17 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
2020/05/24 Python
对Keras中predict()方法和predict_classes()方法的区别说明
2020/06/09 Python
详解Django ORM引发的数据库N+1性能问题
2020/10/12 Python
Python求区间正整数内所有素数之和的方法实例
2020/10/13 Python
运行python提示no module named sklearn的解决方法
2020/11/29 Python
Jupyter Notebook 远程访问配置详解
2021/01/11 Python
html5中svg canvas和图片之间相互转化思路代码
2014/01/24 HTML / CSS
巴西最大的家电和百货零售商:Casas Bahia
2016/11/22 全球购物
家乐福台湾线上购物网:Carrefour台湾
2020/09/15 全球购物
企业申诉管理制度
2014/01/30 职场文书
初三学生评语大全
2014/04/24 职场文书
硕士毕业论文导师评语
2014/12/31 职场文书
拾金不昧感谢信
2015/01/21 职场文书
检讨书格式范文
2015/05/07 职场文书
关于做家务的心得体会
2016/01/23 职场文书
浅谈JS的二进制家族
2021/05/09 Javascript
golang操作redis的客户端包有多个比如redigo、go-redis
2022/04/14 Golang