文档章节

python 24小时排行

昏鸦
 昏鸦
发布于 2014/03/24 18:20
字数 799
阅读 319
收藏 5
点赞 1
评论 0

#!/usr/bin/env python

#coding=utf-8

'''

Created on 2013-8-22


@author : 昏鸦

'''

import MySQLdb

import time

import pexpect

import subprocess

import os

import socket

import urllib2

import sys

mintor_url = 'http://ip/sms?appId=1001&to=电话&msg='#   短息接口

News_Result_='News_Result_'

tempdir= 'datas/'

tmpexedir= 'exedatas/'

reasultdir='redatas/'


######test#####

#pubid=int(13938)

#dbip='数据库ip'


##########oline###########

pubid=int(14219)

dbip='数据库ip'



global ipath 

ipath=os.getcwd()+'/'

def telme(info):

    global mintor_url

    tmp_url = mintor_url+info

    socket.setdefaulttimeout(10)

    response = urllib2.urlopen(tmp_url)

    html = response.read() 

    print html

    response.close()

   

    

def getlogname(hour):

    return News_Result_+str(time.strftime('%Y%m%d%H',time.localtime(time.time()-hour*60*60)))+".log"  


def dbexe(filename):

    ida =str(time.strftime('%Y-%m-%d',time.localtime(time.time()-24*60*60)))

    db = DB()

    data_list = db.getpubnews(pubid ,ida)

    newsower = db.getnewsowerinfo(ida)

    print 'open result file:',filename

    file = open(filename)

    k=200

    dbresult=[];

    while 1:

        print 'k:',k

        if k <=0:

            break

        lines = file.readlines(200)

        if not lines:

            break

        for line in lines:

            try:

                if k <=0:

                    break

                line = line.strip()

                lists = line.split('|')

                if(lists[0].isdigit() and lists[1].isdigit()  and newsower.count(int(lists[0]))<=0):

                    datainfo = []

                    datainfo.append(int(lists[0]))

                    datainfo.append(int(k))

                    dbresult.append(datainfo)

                    k-=1

            except Exception, ex:

                print ex

    dbresult.reverse()

    if k>100:

        print 'data is to small,so return:',filename

        return 

    if db.addpubnews(pubid,dbresult):

            if data_list[0] is not None:

                db.delpubnews(pubid, int(data_list[0]), int(data_list[1]))

    file.close()

    db.destory()

                


def checkexistsyn(name,num):

    if os.path.exists(name) == False:

        syndata(num)

        

def awkexe():

    log1= ipath+tempdir+getlogname(2)

   

    log2= ipath+tempdir+getlogname(3)

    log3= ipath+tempdir+getlogname(4)

    checkexistsyn(log1,2)

    checkexistsyn(log2,3)

    checkexistsyn(log3,4)

    

        

    reultname = ipath+reasultdir+str(time.strftime('%Y%m%d%H%M%S',time.localtime(time.time())))+'.log'

    cmd =' cat '+log1+' '+log2+' '+log3+' | awk \'$1 !~/^NULL/\'  | awk -F "|"  \'{a[$1]+=$2}END{for(x in a)print x"|"a[x]}\'  | sort -n  -r -k 2 -t "|" >> '+reultname

    print 'cmd:',cmd

    re = subprocess.call([cmd],shell=True)

    if re==0:

        print 'success'

        dbexe(reultname)

    else:

        telme('awk-exe-fail-oa')


def syndata(hour):

    logn = getlogname(hour)

    command = 'rsync -v 用户名@ip:/data/tianliang/NewsSort/NewsResult/'+logn +"  "+ipath+tempdir

    print 'command:',command

    path = ipath+tempdir+logn

    foo = pexpect.spawn(command)  

    index = foo.expect(["(?i)yes/no", "(?i)password", pexpect.EOF, pexpect.TIMEOUT])


    if (index == 0):

            print ' need---------------yes'

            foo.sendline('yes')

            foo.expect("(?i)password")

            foo.sendline('dev4smc')

            foo.expect(pexpect.EOF)

            foo.close() 

            print 'syndata w success' 

    elif(index == 1):

            print ' need---------------pass'

            foo.sendline('dev4smc')

            foo.expect(pexpect.EOF)

            foo.close()

            

            print 'syndata q success'

    else :

            print 'has error'

            

    return os.path.exists(path)



def gethour():

    d4= time.localtime(time.time())

    return int(d4.tm_hour)


def checkDate():

    

    hour = gethour()

    #if hour==9 or hour==12 or hour==17 or hour==20  or hour==0:

    #    return True

    

    return True


def startjob():

    k = 0

    while k < 10:

        k+=1

        if(syndata(2)):

            if checkDate():

                awkexe()

                return

            else:

                return

        else:

            time.sleep(60*5)

        

    telme('-ryn-data-error-oa-'+str(k))

    

    

def teststartjob():

    pass


    k = 0

    while k < 1:

        k+=1

        if(syndata(2)) and (syndata(3)) and syndata(4):

          #  if checkDate():

                awkexe()

                return

        else:

            time.sleep(60*5)

        

    telme('-ryn-data-error-oa')

  

class DB(object):


    def destory(self):

        if self.cur != None:

            print 'close db cur'

            self.cur.close()

        if self.conn != None:

            print 'close db conn'

            self.conn.close()

        print 'close db '

            

    def __init__(self):

        

        self.conn = MySQLdb.connect(host=dbip, user='user',passwd='pwd', db='dbname', port=3306, charset='utf8')

        self.cur = self.conn.cursor()

        

    def getnewsowerinfo(self,startTime):

        

        sql = "select newsid from p_news_owner where \

        (ownertype =3 or (ownertype=1 &&(ownerid in(1,2))) or (ownertype=2 && ownerid = 13793)) and createTime >='%s'"

        print sql

        list=(startTime)

        self.cur.execute(sql%list)

        data_list=[]

        data_list.extend( self.cur.fetchall())

        result = []

        for data in data_list:

            try:

                result.append(int(data[0]))

            except Exception, eo:

                print "a date has error:",eo

        return result

    def addpubnews(self,ipubid,datas):

        

        idate=str(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))

        print 'start add pub_news pubid :%d, date:%s'%(ipubid,idate)

        sql = "insert into p_pub_news (pubid, newsid,weight,newscreatetime,createtime,publishtime,createuser) values(%d,%d,%d,'%s','%s','%s','%s')"

        for data in datas:

            list=(ipubid,data[0],data[1],idate,idate,idate,'lixuan')

           # print "add sql:",sql%list

            self.cur.execute(sql%list)

        #self.cur.executemany(sql,relist)

        self.conn.commit()

        print ' add pub_news success pubid :%d, date:%s'%(ipubid,idate)

        return True

    

    def delpubnews(self,ipubid, maxid,minid):

        

        print 'start dele data , maxid:%d,pubid:%d'%(maxid,ipubid)

        sql = 'delete from p_pub_news where id <= %d and id >=%d and pubid = %d'

        list=(maxid,minid,ipubid)

        self.cur.execute(sql%list)

        self.conn.commit()

        print 'dele data p_pubnews success, maxid:%d,pubid:%d'%(maxid,ipubid)

       

    def getpubnews(self, ipubid,idate):

        #and createtime < '%s'

        sql = "select max(id),min(id) ,count(1) from p_pub_news where pubid =%d  "

        list=(ipubid)

        self.cur.execute(sql%list)

        data_list=[]

        data_list.extend( self.cur.fetchall())

        return data_list[0];

    

    

if __name__ == '__main__':

     #global ipath

     if len(sys.argv) >1:

         ipath = sys.argv[1]

         

     idate=str(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))

     print 'start service...,',idate

     #teststartjob()

     startjob()

    


© 著作权归作者所有

共有 人打赏支持
昏鸦
粉丝 6
博文 155
码字总数 58873
作品 0
程序员
查找出含有特定文件并且24小时内有更新的目录python脚本

查找出指定文件所在目录24小时内有更新的部分python脚本: 注: 1、先找出含有aa.txt文件的所有目录 2、再筛选出24小时(86400秒)内有更新的目录 3、写入时记得加'n'(换行),读取时记得排...

yangzhimingg ⋅ 06/07 ⋅ 0

判断文件的更改时间是否超过24小时python脚本

判断文件的更改时间是否超过24小时python脚本: vi a1.py #!/usr/bin/python import os import time dir="/root/ming.txt" now = time.time() f = os.path.getmtime(dir) if f < (now - 8640......

yangzhimingg ⋅ 06/07 ⋅ 0

chain.from_iterable实现同时walk多个目录

chain.from_iterable实现同时walk多个目录: 注: 1、注意多个目录的写格式:('aa/bb','cc/dd') 2、注意chain for的写格式:for root,dirs,files in chain.from_iterable(os.walk(root) for ...

yangzhimingg ⋅ 06/08 ⋅ 0

python2.7.5升级到3.5.0

当前系统版本centos7.2_x64 1.查看当前python版本 python -V Python 2.7.5 2.下载python3.5.0版本 wget https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tgz 3.解压和安装 tar -xvf P......

静听的风 ⋅ 05/18 ⋅ 0

听说这是70%学Python人,都会弄错的题,看你是否学到位

菜鸟独白 Python语言虽然优美,简洁和强大,但是也有很多坑,一不小心就会掉进去。我学Python的时候也遇到过,今天总结一下,希望对大家能有收获! 1.陷阱1:可变默认参数 Python里面可变参数...

雁横 ⋅ 05/05 ⋅ 0

Python 人气王,JS 比 Java 更受公司青睐

四月 PYPL 编程语言排行榜和 Hacker News 招聘趋势都已经出炉。 Hacker News 招聘趋势的数据由 Hacker News 新闻站负责收集,它不仅仅关注编程语言趋势,还关注公司要求的顶尖技能的趋势,包...

达尔文 ⋅ 04/23 ⋅ 17

6 个 Python 的日期时间库

在 Python 中有许多库可以很容易地测试、转换和读取日期和时间信息。 这篇文章是与 Jeff Triplett 一起合写的。 曾几何时,我们中的一个人(Lacey)盯了一个多小时的 Python 文档中描述日期和...

16% ⋅ 05/22 ⋅ 0

TIOBE和PYPL的5月编程语言排行榜:如果你只能学习一门语言,Python是最好的选择!...

点击上方“程序人生”,选择“置顶公众号” 第一时间关注程序猿(媛)身边的故事 图片来源:Avengers: Infinity War 近日,TIOBE编程语言社区发布了 2018年 5月排行榜,Java、C、C ++ 三门编...

csdnsevenn ⋅ 05/10 ⋅ 0

在技术圈儿混,怎能不关注这几个公众号!

精品公众号订阅,总有几个适合你 AIOps智能运维 ID:AI_Ops ▲长按图片识别二维码关注 百度云智能运维团队官方公众号!我们利用大规模分布式、大数据和机器学习等技术为百度云用户和百度各产...

g2v13ah ⋅ 03/30 ⋅ 0

python-nmap 端口扫描示例

python-nmap是对nmap命令的封装,方便python操作nmap扫描器 首先安装nmap yum install nmap -y ##shell命令操作端口扫描方法见此文:http://blog.51cto.com/superleedo/2094273 接着安装pyt...

super李导 ⋅ 05/21 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

懒惰根本就不存在

简评:芝加哥大学心理学教授,懒惰根本就不存在。(本文表面讲行为心理学实则讲教育) 金句:以好奇而不是判断来回应一个人的无效行为,是非常有帮助的。 本文「我」代表原作者 E Price。 自...

极光推送 ⋅ 14分钟前 ⋅ 0

Excel提取单元格中最后一个“.”后面的数据

java.lang.String ----- String =TRIM((MID(SUBSTITUTE(B2,".",REPT(" ",99)),(LEN(B2)-LEN(SUBSTITUTE(B2,".","")))*99,99)))...

klog ⋅ 16分钟前 ⋅ 0

mac远程桌面

下载安装remote-desktop-mac Mac beta 客户端 mac通过远程桌面访问windows服务器。

亚林瓜子 ⋅ 20分钟前 ⋅ 0

firrtl

动手---sbt(2)之后,再回头看 chisel第一个实验,根据 https://github.com/freechipsproject/firrtl 发现firrtl没有执行sbt assembly命令,重新执行这个命令,结果成功。如下图: joe@joe-As...

whoisliang ⋅ 24分钟前 ⋅ 0

NIO

一、通道(Channel):用于源节点与目标节点的连接。在 Java NIO 中负责缓冲区中数据的传输。Channel 本身不存储数据,因此需要配合缓冲区进行传输。 二、通道的主要实现类 java.nio.channel...

stars永恒 ⋅ 25分钟前 ⋅ 0

Android悬浮窗的实现

0. 前言   现在很多应用都使用到悬浮窗,例如微信在视频的时候,点击Home键,视频小窗口仍然会在屏幕上显示。这个功能在很多情况下都非常有用。那么今天我们就来实现一下Android悬浮窗,以...

猴亮屏 ⋅ 25分钟前 ⋅ 0

日志采集中的关键技术分析

概述 日志从最初面向人类演变到现在的面向机器发生了巨大的变化。最初的日志主要的消费者是软件工程师,他们通过读取日志来排查问题,如今,大量机器日夜处理日志数据以生成可读性的报告以此...

tqyin ⋅ 26分钟前 ⋅ 0

使用Navicat将数据导出为text文本 然后再导入

将数据导出为text文本效率很高 1. 准备工作 1.1 准备表结构 1.2 目标库 执行生成表结构sql 2.将表数据导出为text文本 生成的text文本 3. 目标库 导入text 4.效果...

Lucky_Me ⋅ 32分钟前 ⋅ 0

IntelliJ IDEA 乱码解决方案 (项目代码、控制台等)

文章介绍了idea下,项目乱码、控制台乱码及运行tomcat控制台乱码的解决方案,文章链接:https://www.cnblogs.com/vhua/p/idea_1.html

Funcy1122 ⋅ 35分钟前 ⋅ 0

IDEA使用sonarLint

一、IDEA如何安装SonarLint插件 1.打开 Idea 2.点击【File】 3.点击【Settings】 4.点击【Plugins】 5.在搜索栏中输入“sonarlint”关键字 6.点击【Install】进行安装 7.重启Idea 二、IDEA如...

开源中国成都区源花 ⋅ 40分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部