python下操作ftp上传
生产情况: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上传的更多相关文章
- python之实现ftp上传下载代码(含错误处理)
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之实现ftp上传下载代码(含错误处理) #http://www.cnblogs.com/kait ...
- 【Python学习 】Python实现的FTP上传和下载功能
一.背景 最近公司的一些自动化操作需要使用Python来实现FTP的上传和下载功能.因此参考网上的例子,撸了一段代码来实现了该功能,下面做个记录. 二.ftplib介绍 Python中默认安装的ftp ...
- 使用python操作FTP上传和下载
函数释义 Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件,函数列举如下 ftp登陆连接 from ftplib import F ...
- windows、linux下通过ftp上传文件小脚本
一.windows @echo off #open ip 将要上传文件的IP地址echo open IP>ftp.up #用户名echo ninic>>ftp.up #密码echo ...
- python网络编程--FTP上传文件示例
1.基础版(供学习了解原理使用,low) server服务端 import socket import struct import json server = socket.socket() ip_p ...
- Centos 下搭建FTP上传下载服务器
首先判断你服务器上是否安装了vsftpd 安装vsftpd #yum -y install vsftpd 安装完成之后就要重启vsftpd服务 到vsftpd的主配置文件里面 把这个改为NO 默认 ...
- python之路--FTP 上传视频示例
# 服务端 import json import socket import struct server = socket.socket() server.bind(('127.0.0.1',8001 ...
- 通过cmd完成FTP上传文件操作
一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...
- windows下定时利用bat脚本实现ftp上传和下载
前言: 工作中可能会遇到以下情况,利用windows作为中转,来实现两台linux服务器的文件传输. 实现步骤: 1.FTP上传和下载的bat脚本. 脚本分为两部分:可执行bat脚本和ftp命令文件: ...
随机推荐
- [转贴]xcode帮助文档
突然间得到了一台MAC ,这时候不学OC 更待何时学呀?马上找了IOS开发的书和网上的帖子看,最近在开源力量那里看了TINYFOOL的入门讲座,讲的都很虚,可能时间不够吧,也没看到什么例子呀,什么的, ...
- SectionIndexer中的getSectionForPosition()与getPositionForSection()
大家在做字母索引的时候常常会用到SectionIndexer这个类,里面有2个重要的方法 1. getSectionForPosition()通过该项的位置,获得所在分类组的索引号 2. getP ...
- POJ_2229_Sumsets_(动态规划)
描述 http://poj.org/problem?id=2229 将一个数n分解为2的幂之和共有几种分法? Sumsets Time Limit: 2000MS Memory Limit: 20 ...
- jackson 常见问题
org.codehaus.jackson.map.JsonMappingException: No suitable constructor found for type org.codehaus ...
- Windows Server基础架构云参考架构:硬件之上的设计
作者 王枫 发布于2014年1月27日 综述 毫无疑问,移动互联网.社交网络.大数据和云计算已经成为IT发展的四个大的趋势.其中云计算又为前三个提供了一个理想的平台.今天不仅互联网公司,很多传统行业的 ...
- 整理:Google jQuery 引用地址大全和方法(转)
什么是google的js托管? 说的明白点,跟我们以往做法一样,只不过这时候的引用的js库是放在google服务器上的. 比如引用jquery,则使用路径 http://ajax.googleapi ...
- HTML5与CSS3权威指南.pdf1
第2章 HTML5与HTML4的区别 HTML5的文件扩展符与内容类型保持不变仍为“.html”或“.htm”,内容类型(ContentType)仍为“text/html” DOCTYPE声明: HT ...
- [SAM4N学习笔记]按键程序(中断方式)
一.准备工作: 将上一节搭建的工程复制一份,命名为"6.key interrupt".这一节主要讲如何使用SAM4N的GPIO中断功能,实现按键的中断输入. 二.程序编写 ...
- hadoop作业调优参数整理及原理【转】
1 Map side tuning参数 1.1 MapTask运行内部原理 当map task开始运算,并产生中间数据时,其产生的中间结果并非直接就简单的写入磁盘.这中间的过程比较复杂,并且利用到了内 ...
- openstack libtray
OpenStack packages¶ Distributions release OpenStack packages as part of the distribution or using ot ...