python脚本访问ftp服务器(2)

实现了可以访问ftp服务,需要在ftp服务器上进行文件的上传和下载。
下载测试
最开始因为服务器端的带宽限制,下载的速度在1M/S。提升了带宽速度后,下载速度提升到15M/S。
用python做速度测试,起一个测速线程进行测试。

def seeFile(localfilename):                                                                                                    
       sizebuff = 0                                                               
       while True:                                                                
           time.sleep(1)                                                          
           size = os.path.getsize(localfilename)                                  
           print size - sizebuff                                                  
           sizebuff = size 

subThread = threading.Thread(target = seeFile, args = ('aaa.txt',))                                                           
subThread.start()

多线程下载
因为一开始的带宽有限,为了提高速度,在git上找到一个多线程ftp下载的代码 git地址 分片下载,最后合并,速度提升还是挺快的, 就是如果线程数太多,带宽有限制,会出现线程执行不均匀的情况,需要合理安排线程数量。

下载完成后,要对下载下来的文件进行解密和解压。

tar -jcvf - ./20171226 | openssl des3 -salt -k '**********' | dd of=20171226.bz2.des3

使用tar解压过程失败。最后换成

zip -r -P '******' 20171227.zip  20171227

剩下就是ftp二进制上传和下载的代码,网上说:

中文路径问题:由于FTP支持ASCII编码,Python ftplib中编码方式使用latin-1,而window默认编码方式为gbk,所以使用Python处理时需先将中文路径编码为gbk之后译码为latin-1字符;

上传下载使用storline和retrline,对应二进制使用storbinary和retrbinary。对于stor类函数后面的参数fp表示接收一个文件对象,支持read方法,一般为打开需要上传的源文件,而retr类函数后面的参数表示对于返回数据的处理方法。

# 下载
fp = open("20171227.zip", 'wb') 
ftp.retrbinary("RETR 20171227.zip", fp.write) 
# 上传
fp = open("20171227.zip", 'rb')
ftp.storbinary('STOR 20171227.zip', fp)
fp.close()

你可能感兴趣的:(python脚本访问ftp服务器(2))