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

#!/usr/local/bin/python3.5
###Description: 上传业务log到NFS199
###Author: Danny.Deng
###DateTime: 2016-11-25
import os,sys,shutil,time,datetime,re,socket,subprocess,ftplib
##########################
backup_dir = "/dockerlogs/"
###############ip地址依赖hosts文件中的hostname解析
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")
yearday = (datetime.datetime.now() - datetime.timedelta(days=365)).strftime("%Y%m%d")
###############取log文件
pattern = re.compile(r'' + thirday + '*.log$' )
year_pattern = re.compile(r'' + yearday + '*.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.168.xxxxx")
ftp.login("syxxx","xxxx",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("19xxxxx")
ftp.login("sxxx","sxxxxx",10)
try:
ftp.cwd(ftp_dir)
except ftplib.error_perm:
pass
try:
ftp.mkd(services)
except ftplib.error_perm:
ftp.quit()
#############遍历service目录中的符合的文件
for file in sorted(os.listdir(services_dir)):
match = pattern.search(file)
y_match = year_pattern.search(file)
if match:
#############匹配到文件后进行 文件名 更换操作,方便上传
ftpdir_service = ftp_dir + "/" + services
#############登录到ftp上的对应目录,准备上传
ftp = ftplib.FTP("xxxxx")
ftp.login("xxxxx","xxxxxx",10)
try:
ftp.cwd(ftpdir_service)
except ftplib.error_perm:
pass
filename = services_dir + "/" + file
file_gz = file + ".gz"
#############上传压缩文件到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)
os.remove(filename_gz)
#############替换文件日期,即取出一年前的文件格式进行后续的ftp.delete
year_filename = filename_gz.replace(thirday,yearday)
#############错误处理,如果文件不存在时 pass
#ftp.dir(file_gz)
try:
ftp.delete(year_filename)
except ftplib.error_perm:
pass

  

python下操作ftp上传的更多相关文章

  1. python之实现ftp上传下载代码(含错误处理)

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python之实现ftp上传下载代码(含错误处理) #http://www.cnblogs.com/kait ...

  2. 【Python学习 】Python实现的FTP上传和下载功能

    一.背景 最近公司的一些自动化操作需要使用Python来实现FTP的上传和下载功能.因此参考网上的例子,撸了一段代码来实现了该功能,下面做个记录. 二.ftplib介绍 Python中默认安装的ftp ...

  3. 使用python操作FTP上传和下载

    函数释义 Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件,函数列举如下 ftp登陆连接 from ftplib import F ...

  4. windows、linux下通过ftp上传文件小脚本

    一.windows @echo off #open ip 将要上传文件的IP地址echo open IP>ftp.up #用户名echo ninic>>ftp.up #密码echo ...

  5. python网络编程--FTP上传文件示例

    1.基础版(供学习了解原理使用,low) server服务端 import socket import struct import json server = socket.socket() ip_p ...

  6. Centos 下搭建FTP上传下载服务器

    首先判断你服务器上是否安装了vsftpd 安装vsftpd #yum -y install vsftpd   安装完成之后就要重启vsftpd服务 到vsftpd的主配置文件里面 把这个改为NO 默认 ...

  7. python之路--FTP 上传视频示例

    # 服务端 import json import socket import struct server = socket.socket() server.bind(('127.0.0.1',8001 ...

  8. 通过cmd完成FTP上传文件操作

    一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...

  9. windows下定时利用bat脚本实现ftp上传和下载

    前言: 工作中可能会遇到以下情况,利用windows作为中转,来实现两台linux服务器的文件传输. 实现步骤: 1.FTP上传和下载的bat脚本. 脚本分为两部分:可执行bat脚本和ftp命令文件: ...

随机推荐

  1. [wikioi]多源最短路

    http://wikioi.com/problem/1077/ Floyd算法.精华是三层循环,if (dist(i,k) + dist(k,j) < dist(i,j)) then dist( ...

  2. Win7新建ftp快捷方式(原XP网上邻居中客户端图标)

      2014-6-2 XP逐渐隐退,新机器一般都是Win7或者Win8了.有很多朋友反映在这两个新系统中找不到类似XP网上邻居中的ftp链接图标.故稍微研究了下,以Win7为例,总结如下. 1.骨灰级 ...

  3. php中header函数后是否应该有exit

    通常有一下三种:  代码如下 复制代码 Location: xxxx:yyyy/zzzz Content-Type: xxxx/yyyy Status: nnn xxxxxx 常用实例 1.实现重定向 ...

  4. 深入分析iSCSI协议的应用

    深入分析iSCSI协议的应用 1 引言 快速增长的存储容量使得企业需要采用网络存储解决方案.目前网络存储技术采用的连接技术主要有光纤通道和TCP/IP.基于IP的网络存储能解决基于光纤通道的网络存储中 ...

  5. pcDuino 刷系统-卡刷

    准备: pcduino : 点此购买 支持HDMI的显示器:点此购买  或参考无显示器刷机与使用.至少1张4G microSD卡,如果内存卡不大,可以用内存卡刷内核,用u盘刷系统 背景:本教程中使用的 ...

  6. Linux kernel get_prng_bytes函数数字错误漏洞

    漏洞名称: Linux kernel get_prng_bytes函数数字错误漏洞 CNNVD编号: CNNVD-201310-142 发布时间: 2013-10-11 更新时间: 2013-10-1 ...

  7. 在Azure中使用Load Runner测试TCP最大并发连接数

    对于Azure中的每一台虚机,它所能支持的TCP最大并发连接数是50万(参考微软官网: http://azure.microsoft.com/en-us/documentation/articles/ ...

  8. 用 Eclipse 开发 Android 应用程序

    转自:http://www.apkbus.com/android-13828-1-1.html 开始之前 本教程介绍如何在 Eclipse 环境中进行 Android 应用程序开发,包括两个示例应用程 ...

  9. 计算几何(凸包):SHTSC 2012 信用卡凸包

    这道题是水题,发现平移某些边,答案就是圆心的凸包+一个圆的周长. 不要忽视精度误差! #include <algorithm> #include <iostream> #inc ...

  10. HDU-1686 Oulipo

    学习:重点理解这句话的意思: next[j]会告诉我们从哪里开始匹配     模板题. Oulipo Time Limit: 3000/1000 MS (Java/Others)    Memory ...