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()
复制代码
原文地址:https://www.cnblogs.com/DEJAVU888/p/15303172.html