Python下使用ftplib上传文件到ftp上

生产情况:tomcat下业务log备份,目录分多级,然后对应目录格式放到ftp上;所以,结构上 我就是一级一级目录进行判断(因为我没有找到在ftp一次判断其子目录是否存在),还有一个low点就是我没有找到怎样一次性的调用ftp的login因为现在每次判断都需要登录一下,最终功能是实现了;想着先贴出来

#!/usr/local/bin/python3.5
###Description: 上传业务log到FTP199
###Author: Tonny.Deng
###DateTime: 2016-11-22
import os,sys,shutil,time,datetime,re,socket,subprocess
import ftplib
##########################
backup_dir = "/dockerlogs/"
ip_addr = socket.gethostbyname(socket.gethostname())
ports = sorted(os.listdir(backup_dir))
yesterday = (datetime.datetime.now() - datetime.timedelta(days=1)).strftime("%Y-%m-%d")
thirday = (datetime.datetime.now() - datetime.timedelta(days=2)).strftime("%Y-%m-%d")
###############取log文件
pattern = re.compile(r‘‘ + thirday + ‘*.log$‘ )
#pattern = re.compile(r‘‘ + thirday + ‘*.log‘ )
###############取服务端口列表目录
for port in (ports):
   port_dir = backup_dir + port
   ftp_dir = ip_addr + "/" + port
##############判断ftp上是否有对应目录,没有则创建,此次判断是两个目录 如:192.168.20.130/8000 这两个目录是否存在
   ftp = ftplib.FTP("192.xxxxx")
   ftp.login("sxxxxxxxxxxxxxx","xxxxxxxxx,10)
   try:
      ftp.mkd(ip_addr)
      ftp.cwd(ip_addr)
      try:
         ftp.mkd(port)
         ftp.quit()
      except ftplib.error_perm:
         ftp.quit()
   except ftplib.error_perm:
      ftp.cwd(ip_addr)
      try:
         ftp.mkd(port)
         ftp.quit()
      except ftplib.error_perm:
         ftp.quit()
##############取端口目录下的service目录
   for services in sorted(os.listdir(port_dir)):
      services_dir = port_dir + "/" + services
##############判断services目录是否存在,即第三级 如:192.168.20.130/8000/yunwei
      ftp = ftplib.FTP("192.xxxxxx")
      ftp.login("syxxxxxx","sxxxxxx",10)
      ftp.cwd(ftp_dir)
      try:
         ftp.mkd(services)
      except ftplib.error_perm:
         ftp.quit()
#############遍历service目录中的符合的文件
      for file in sorted(os.listdir(services_dir)):
         match = pattern.search(file)
         if match:
#############匹配到文件后进行 文件名 更换操作,方便上传
            ftpdir_service = ftp_dir + "/" + services
#############登录到ftp上的对应目录,准备上传
            ftp = ftplib.FTP("19xxxxxxxxxx")
            ftp.login("sxxxxx","syxxxxxxx",10)
            ftp.cwd(ftpdir_service)
            filename = services_dir + "/" + file
#############上传压缩文件到ftp
            os.environ[‘filename‘] = str(filename)
            os.system(‘gzip $filename‘)
            filename_gz = filename +  ".gz"
#############只读模式打开本地需要上传的文件
            filename_put = open(filename_gz,‘rb‘)
            ftp.storbinary(‘STOR %s‘ % os.path.basename(filename_gz),filename_put)
            ftp.nlst()

  

时间: 2024-07-31 14:35:06

Python下使用ftplib上传文件到ftp上的相关文章

Android上传文件之FTP

android客户端实现FTP文件(包括图片)上传应该没什么难度.写下来就了为了记录一下,望能帮到新手. 需要用到 commons-net-3.0.1.jar,后面附上jar包. 直接上代码: /**  * 通过ftp上传文件  * @param url ftp服务器地址 如: 192.168.1.110  * @param port 端口如 : 21  * @param username  登录名  * @param password   密码  * @param remotePath  上到

PHP上传文件时无法上传成功,$_FILES['screenshot']['tmp_name']为空

最近在学习<HeadFirst PHP & MySQL>一书的第5章"使用存储在文件中的数据",做一个文件上传的应用时,出现了错误,就是文件无法成功上传.这个问题困扰了我很久,不过还好最后终于解决了.原因是我上传的图片文件大小超过了HTML 表单中 MAX_FILE_SIZE 选项指定的值32768Bytes即32KB导致无法上传成功. 我使用了XAMPP(Apache + MySQL + PHP + Perl)集成开发包和Zend Studio 10.6作为PHP

使用HttpRequest.Files 获取上传文件,实现上传附件功能

使用HttpRequest.Files 获取上传文件,实现上传附件功能,不同浏览器会有差异: 获得在 Google 浏览器上传后得到的 HttpRequest.Files  (客户端上载文件的集合) 单个文件查看:对应的FileName 是上传文件的原始文件名:例:开发管理手册2017版.docx 获取IE浏览器上传后HttpRequest.Files: 单个文件查看:对应的FileName 是上传文件 带路径的文件名 例:C:\\Users\\XXX\\Desktop\\开发管理手册2017版

异步无刷新上传文件并且上传文件可以带上参数

关于异步上传文件并且带上参数,网上有很多关于这样的插件,而我最喜欢用的插件是ajaxfileupload.js,该插件的代码如下: /*   131108-xxj-ajaxFileUpload.js 无刷新上传图片 jquery 插件,支持 ie6-ie10    依赖:jquery-1.6.1.min.js   主方法:ajaxFileUpload 接受 json 对象参数   参数说明:   fileElementId:必选,上传文件域ID   url:必选,发送请求的URL字符串   fi

异步无刷新上传文件而且上传文件能够带上參数

关于异步上传文件而且带上參数,网上有非常多关于这种插件.而我最喜欢用的插件是ajaxfileupload.js.该插件的代码例如以下: /*   131108-xxj-ajaxFileUpload.js 无刷新上传图片 jquery 插件.支持 ie6-ie10    依赖:jquery-1.6.1.min.js   主方法:ajaxFileUpload 接受 json 对象參数   參数说明:   fileElementId:必选,上传文件域ID   url:必选,发送请求的URL字符串  

Linux上F上传文件到FTP服务器

Linux上上传跟Windows上上传不一样,在Windows上测试没问题,但是放到Linux服务器上跑,上传的文件中文显示乱码.解决方案: FtpUtil.java红色标记处 package cn.zto.util; import java.io.ByteArrayInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOExce

ajax 上传文件,post上传文件,ajax 提交 JSON 格式的数据

ajax简介 前后台做数据交互 前后端做数据交互的方式(三种): (1)浏览器窗口输入地址(get的方式)(2)form表单提交数据(3)ajax提交数据 特点 特点: (1)异步 异步与同步的区别:同步是请求发过去,要等着回应:异步不需要等待,可以进行其他操作 (2)局部刷新 使用 使用: (1)url:匹配的路由 (2)type:发送的的方式 (3)data:发送的数据 (4)success:发送的数据成功回调条数 $('.btn').click(function () { $.ajax({

上传文件、ajax上传文件

一.普通上传文件 1 后台 from django.shortcuts import render,HttpResponse # Create your views here. def login(request): if request.method == 'GET': return render(request, 'login.html') def fileupload(request): myfile=request.FILES.get('myfile') with open(myfile

使用脚本上传文件到FTP

使用普通用户上传文件 脚本内容: #!/bin/shDIR=/var/ftp/upload/ FILE=hosts ftp -n 192.168.203.129<<EOF user root Abc123 binary cd $DIR lcd /etc/ put $FILE bye EOF 说明: binary:使用二进制方式传输 使用匿名用户上传文件: #!/bin/sh FILE=hosts ftp -n 192.168.203.129<<EOF user "ftp&