zoukankan      html  css  js  c++  java
  • DAY 203 python实现ftp上传下载

    * 脚本需要传入两个参数,参数1为需要从远端ftp站点下载文件名称,参数2为已知需要下载的文件md5值,文件下载完成后会自动进行md5值校验

    * 运行示例

    [root@vm172-31-16-11 software]# python file.txt 2d6c30dba93eda3f70f662a390d8e49c

    复制代码
     1      # -*- coding: utf-8 -*-
     2     
     3     from ftplib import FTP
     4     import time
     5     import tarfile
     6     import os
     7     import sys
     8     import ftplib
     9     import hashlib
    10     
    11     filename = sys.argv[1]
    12     localpath = '/data/update/'
    13     remotepath = '/server'
    14     def ftpconnect(host, username, password):
    15         ftp = FTP()
    16     #    ftp.set_debuglevel(2)
    17         ftp.connect(host, 21)
    18         ftp.login(username, password)
    19         print ftp.welcome
    20         return ftp
    21     def downloadfile(ftp, filename):    
    22         if  os.path.exists(localpath):
    23             pass
    24         else:
    25             os.makedirs(localpath, 0755)
    26         bufsize = 1024
    27         ftp.cwd(remotepath)
    28         ftp.dir()
    29         fp = open(localpath + filename,'wb')
    30         ftp.retrbinary('RETR %s' % os.path.basename(filename), fp.write, bufsize)
    31         fp.close()
    32     
    33     def getFileMD5():
    34         filepath = localpath + filename
    35         if os.path.exists(filepath):
    36         f = open(filepath,'rb')
    37         md5obj = hashlib.md5()
    38         md5obj.update(f.read())
    39         hash = md5obj.hexdigest()
    40         f.close()
    41         return str(hash).upper()
    42         else:
    43             print "33[1;31;40mERROR:Get the %s MD5 failed33[0m" % filepath
    44             return None
    45     
    46     def file_exists():
    47         filemd5 = getFileMD5()
    48         downloadftpfile = localpath + filename
    49         if os.path.exists(downloadftpfile) and filemd5 == sys.argv[2]:
    50             print "33[1;32;40m====================ftp down ok and md5 value is ok======================33[0m"
    51         elif os.path.exists(downloadftpfile) and filemd5 != sys.argv[2]:
    52             print "33[1;31;40m====================ftp down ok and md5 value is bad======================33[0m"
    53         else:
    54             print "33[1;31;40mERROR:The %s is not exists33[0m" % downloadftpfile
    55     
    56     def uploalfile(ftp, remotepath, localpath):
    57         bufsize = 1024
    58         fp = open(localpath, 'rb')
    59         ftp.storbinary('STOR ' + remotepath, fp, bufsize)
    60     #    ftp.set_debuglevel(0)
    61         ftp.close()
    62     
    63     def download():
    64         try:
    65             ftp = ftpconnect("x.x.x.x", "x.x", "x.x")
    66             downloadfile(ftp, filename)
    67             ftp.quit()
    68             file_exists()
    69         except ftplib.error_perm:
    70             os.chdir(localpath)    
    71             os.remove(filename)
    72             file_exists()
    73     if __name__ == "__main__":
    74         download()
    复制代码
  • 相关阅读:
    Dubbo 节点telnet测试
    node.js 文件下载
    node.js获取ip及mac
    excel中根据A列筛选B列填充C列
    django在读取数据库时未筛选到符合条件的记录会报错
    django分页功能
    django中命令行调试程序
    Python中if-else的多种写法
    python自定义函数的参数之四种表现形式
    python类变量和实例变量的区别
  • 原文地址:https://www.cnblogs.com/DEJAVU888/p/15303172.html
Copyright © 2011-2022 走看看