博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
儿童天赋脚本
阅读量:6093 次
发布时间:2019-06-20

本文共 8447 字,大约阅读时间需要 28 分钟。

#!/usr/bin/python#coding:utf-8__author__ = 'similarface'import timeimport sys,datetime,re,subprocess#发送邮件from itertools import isliceimport commands,optparse,os,xlrdimport sysimport smtplibfrom email.mime.text import MIMETextmailto_list=["xx@qq.com",'xx@23mofang.com','xx@23mofang.com']#设置服务器mail_host="smtp.qq.com"#用户名mail_user="xx@23mofang.com"#口令mail_pass="xx"#发件箱的后缀mail_postfix="qq.com"def send_mail(to_list,sub,content):    #这里的hello可以任意设置,收到信后,将按照设置显示    me="数据部运行消息"+"<"+mail_user+"@"+mail_postfix+">"    #创建一个实例,这里设置为html格式邮件    msg = MIMEText(content,_subtype='html',_charset='UTF-8')    #设置主题    msg['Subject'] = sub    msg['From'] = me    msg['To'] = ";".join(to_list)    try:        s = smtplib.SMTP()        #连接smtp服务器        s.connect(mail_host)        #登陆服务器        s.login(mail_user,mail_pass)        #发送邮件        s.sendmail(me, to_list, msg.as_string())        s.close()        return True    except Exception, e:        print str(e)        return False#basedirbasedir="/data3/childtalent"#rar原始文件存放目录rarpath=os.path.join(basedir,"current")#old原始文件存放目录oldpath=os.path.join(basedir,"oldrar")#rar解压缩目录extractpath=os.path.join(basedir,"extract")#vcf存放的目录__resultebase='/data2/vsftp/ertongtianfu/'#引用对比数据库__ref=os.path.join(basedir,"db","refAllele.txt")#命令行__run=os.path.join(basedir,"run","LDR2Vcf.pl")#版本文件存放处versionfile=os.path.join(basedir,"version","version.pid")#XLS 转的txt的存放目录:txtoutputdir=os.path.join(basedir,"result")def unrarPackage(inputPath,outputDir):    if os.path.exists(inputPath) and inputPath.endswith("rar"):        (status, output) = commands.getstatusoutput('/usr/local/bin/rar x '+inputPath+' '+outputDir)        if status!=0:            print(output)            return False        else:            return Truedef getXlsxFromunrarDic(unrardir):    '''    获取xlsx文件    :param unrardir:    :return:    '''    for sondir in os.listdir(unrardir):        if os.path.isdir(os.path.join(unrardir,sondir)):            for file in os.listdir(os.path.join(unrardir,sondir)):                if file.endswith("xlsx"):                    return os.path.join(unrardir,sondir,file)def readExcelConvertoTxt(excel,txtPath):    try:        f=open(txtPath,'w')        data=xlrd.open_workbook(excel)        table=data.sheet_by_name(u'ET样品')        #行        nrows = table.nrows        #列        ncols = table.ncols        for i in range(nrows):            if i==0:                headerline=['Sample']                for i in table.row_values(i):                    if i.startswith("rs"):                        headerline.append(i)                f.writelines('\t'.join(headerline)+'\n')            elif i==1:                pass            else:                f.writelines('\t'.join([ table.row_values(i)[j]  for j in range(ncols) if j not in[0,2,3]])+'\n')                print([ table.row_values(i)[j]  for j in range(ncols) if j not in[0,2,3]])        f.close()    except Exception,e:        print(e)def getDateFlag():    '''    获取日期时间字符串    :return:20000101    '''    return str(time.strftime("%Y%m%d"))def getDateDetailFlag():    '''    获取日期时间字符串    :return:20000101    '''    return str(time.strftime("%Y%m%d-%H:%M:%S"))def getVersionFromFile(vfile):    '''    获取版本信息    :param vfile:    :return:    '''    try:        with open(vfile,'r') as v:            for line in islice(v,0,1):                result=str(line.split('\t')[0])        if result==None or result=="":            return 0        else:            return int(result)    except Exception,e:        return 0def getOutPutTxtFile():    return os.path.join(txtoutputdir,getDateFlag()+"GeneResult."+str(getVersionFromFile(versionfile))+'.txt')def writeVersionFrom(file):    '''    书写版本到文件    :param file:    :return:    '''    version=getVersionFromFile(file)    contextlist=[]    try:        with open(file,'r') as v:            context=v.read()        contextlist=context.split('\n')        contextlist.insert(0,str(version+1)+"\t"+str(time.strftime("%Y-%m-%d %H:%M:%S")))    except Exception,e:        contextlist.insert(0,str(version+1)+"\t"+str(time.strftime("%Y-%m-%d %H:%M:%S")))    with open(file,'w') as v:        v.write('\n'.join(contextlist))def txtConvertToVcf(txtPath):        '''        将txt文本转换成vcf        '''        resultpath=getResultDirWithTxt()        if os.path.exists(txtPath) and os.path.isfile(txtPath):            print('源TXT:'+txtPath)            print('源TXT行数:'+getTxtLineSum(txtPath))            runStr='perl '+__run+' '+txtPath+' '+__ref +' '+resultpath            print(runStr)            child = subprocess.Popen(runStr,shell=True)            isSuccess=child.wait()            if isSuccess:                print('txt转换成vcf失败!')                return 0            else:                print('TXT转换成VCF成功!')                print('VCF文件生成路径:'+resultpath)                print('VCF生成数:'+getVcfSum(resultpath))                return getVcfSum(resultpath)        else:            print('源TXT文件不存在')            print('VCF生成数:0')            return 0def getTxtLineSum(txtPath):        '''        获取运行文件的行数        txtPath=文件的行数        返回:文件的行数  不存在返回0行        '''        count=1        if os.path.exists(txtPath) and os.path.isfile(txtPath):            count = len(open(txtPath,'rU').readlines())        return str(count-1)def getResultDirWithTxt():        #基础文件路径        basepath=__resultebase        #运行结果的存放文件夹        try:            #获取文件中的日期作为输出目录的标示            flag=re.match('(^\d{8})GeneResult*',getOutPutTxtFile()).group(1)            print("flag",flag)            path=os.path.join(basepath,flag)        except Exception,e:            path=getResultDirWithCurrData()        #path=os.path.join(basepath,self.__runid)        if os.path.exists(path):# and (os.path.isdir(path) or os.path.isfile(path):            print('输出的文件夹已经存在, 存在的文件夹中有文件数:'+getVcfSum(path))            print("请选择是否继续y/n?")            goon=raw_input()            while 1:                if goon=='y' or goon=='Y':                    return path                if goon=='N' or goon=='n':                    sys.exit(-1)                print "请输入y/n ?",                goon=raw_input()        else:            os.mkdir(path)        return pathdef getResultDirWithCurrData():        #基础文件路径        basepath=__resultebase        #运行结果的存放文件夹        path=os.path.join(basepath,getDateFlag())        return pathdef getVcfSum(path):    '''    获取vcf生产的个数    '''    "*.vcf"    j=0    for i in os.listdir(path):       if i.endswith("vcf"):           j=j+1    return str(j)def getFileSum(dir):    '''    获取vcf生产的个数    '''    "*.vcf"    j=0    for i in os.listdir(dir):        j=j+1    return str(j)if __name__=='__main__':    usage = "ertongtianfu[ -f 
]" opter=optparse.OptionParser(usage) opter.add_option("-f","--file",action="store",dest="rar",help="append rar file") opt,args=opter.parse_args() rarfile=opt.rar if rarfile==None or rarfile=="": for file in os.listdir(rarpath): if file.endswith("rar"): rarfile=os.path.join(rarpath,file) break if rarfile==None or rarfile=="": opter.print_help() sys.exit(0) #解压缩文件 print("清理解压文件") (status, output) = commands.getstatusoutput('rm -rf '+extractpath+"/*") if status!=0: print(output) print('解压缩文件') unrarPackage(rarfile,extractpath) #EXCEL文件 print("读取EXCEL文件") excelfile=getXlsxFromunrarDic(extractpath) #写入批次文件 print("写入批次文件") writeVersionFrom(versionfile) txtPath=getOutPutTxtFile() #EXCEL到txt文件 print("EXCEL到txt文件") readExcelConvertoTxt(excelfile,txtPath) #txt到vcf print("txt到vcf") vcfnum=txtConvertToVcf(txtPath) #清理解压文件 print("清理解压文件") (status, output) = commands.getstatusoutput('rm -rf '+extractpath+"/*") if status!=0: print(output) (status, output) = commands.getstatusoutput('mv '+rarpath+"/* " +oldpath+"/") if status!=0: print(output) print(getVersionFromFile(versionfile),vcfnum,getDateFlag(),rarfile,getTxtLineSum(txtPath)) mailcontext="批次:"+str(getVersionFromFile(versionfile))+"
样本个数:"+str(vcfnum)+"
标志位:"+str(getDateDetailFlag())+"
原始文件:"+os.path.basename(rarfile)+"
获取路" \ "径:ftp://192.168.30.252/ertongtianfu/"+getDateFlag() send_mail(mailto_list,"儿童天赋分析结果",mailcontext)

  

转载于:https://www.cnblogs.com/similarface/p/5530016.html

你可能感兴趣的文章
eclipse中将一个项目作为library导入另一个项目中
查看>>
Go语言学习(五)----- 数组
查看>>
Android源码学习之观察者模式应用
查看>>
Content Provider的权限
查看>>
416. Partition Equal Subset Sum
查看>>
centos7.0 64位系统安装 nginx
查看>>
数据库运维平台~自动化上线审核需求
查看>>
注解开发
查看>>
如何用 Robotframework 来编写优秀的测试用例
查看>>
Django之FBV与CBV
查看>>
Vue之项目搭建
查看>>
app内部H5测试点总结
查看>>
利用Excel表格中的宏,轻松提取首字母
查看>>
ijkplayer实现IMediaDataSource
查看>>
Docker - 创建支持SSH服务的容器镜像
查看>>
[TC13761]Mutalisk
查看>>
三级菜单
查看>>
Data Wrangling文摘:Non-tidy-data
查看>>
加解密算法、消息摘要、消息认证技术、数字签名与公钥证书
查看>>
while()
查看>>