Python 粗略安大小分文件并删除过期文件

话不多说,直接上代码:

#-*-coding:UTF-8-*-

import sys,os
import datetime
import time
from nt import chdir

splitHead = 'split';

def main():
	print "start sc files"
	global splitHead
	# 100mb
	signFileMax = 4 * 1024 * 1024
	# delete 30 days
	deleteDays = 30
	path = None
	if len(sys.argv) > 1:
		path = sys.argv[1]
		if not os.path.isdir(path):
			print "dir is not exist: &s" % path
			return
		filelist = os.listdir(path)
		for file in filelist:
			# check need delete
			if len(file) > 10:
				try:
					dt = datetime.datetime.strptime(file[0:10],"%Y-%m-%d")
					if (datetime.datetime.now() - dt).days > deleteDays:
						print "delete timeout file:%s" % file
						os.remove(path + '\\' + file)
						continue
				except:
					pass
			if file.find(splitHead) < 0:
				print "start split file:%s" % file
				splitFile(path,file,signFileMax)
			
	else:
		print "please input check dir"
	
		
# 0 - max none
# max - max*1.5 rename 
# max * 1.5 -  spilt
def splitFile(path,file,maxsize):
	global splitHead
	othersize = maxsize * 1.5
	pindex=file.rfind('.')
	if pindex < 0:
		return
	filename=file[0:pindex]
	filetype=file[pindex+1:len(file)]
	filepath = path + '\\' + file
	if os.path.isfile(filepath):
		size = os.path.getsize(filepath)
		if size < maxsize:
			return
		if size >= maxsize and size < othersize:
			print "rename file:%s" % file
			os.rename(filepath,'%s\\%s.%s.%s' % (path,filename,splitHead,filetype))
		else:
			n = (size + maxsize) / maxsize
			try:
				with open(filepath) as fh:
					currFileSize = 0
					currIndex = 0
					lineBuffer = []
					for line in fh:
						currFileSize += len(line)
						lineBuffer.append(line)
						if(currFileSize > maxsize):
							newfilename='%s\\%s.%s%i.%s' % (path,filename,splitHead,currIndex,filetype)
							writelinetofile(newfilename,lineBuffer)
							currIndex = currIndex + 1
							currFileSize = 0
							lineBuffer=[]
					if len(lineBuffer) > 0:
						newfilename='%s\\%s.%s%i.%s' % (path,filename,splitHead,currIndex,filetype)
						writelinetofile(newfilename,lineBuffer)
						lineBuffer=[]
			except IOError as err:
				print err
			print "rename file:%s" % file
			os.rename(filepath,'%s\\%s.%s.%s' % (path,filename,splitHead,filetype))

def writelinetofile(filename,list):
	try:
		with open(filename,'w') as nfh:
			nfh.writelines(list)
			print "create new file:%s" % filename
	except IOError as ierr:
		print ierr

if __name__ == '__main__':
	while True:
		print "start check"
		main()
		print "enter sleep 3600s"
		time.sleep(60 * 60)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值