• python小试身手-文件重命名,文件复制和压缩(.gz)


      

     1
    #!/usr/local/bin/python 2 #coding=UTF-8 3 4 import os 5 import csv as csv 6 import re 7 import shutil 8 import os.path 9 import datetime 10 import time 12 import gzip 13 14 15 csv.field_size_limit(1000000) 16 17 18 19 20 21 22 # 输入: 23 # timestr:要创建的数据文件的时间 24 # granulityPeriods:时间粒度 25 # oridir:原始csv文件的存放目录 26 # 文件名为PM201310271604+080024A20131027.1545+0800-20131027.1600+0800_101_Carrier_-_1.xml 27 # outputdir:修改后csv文件的输出目录,格式示例为'D:/OMC_DATA/HW/GSM/OMC1/TIL-HBSC-020/PM/DECODE/' 28 29 def ztetd15data(timestr,granulityPeriods,oridir,outputdir): 30 31 outpath = outputdir.strip() 32 33 if not os.path.exists(outpath): 34 os.makedirs(outpath) 35 36 37 38 createday = datetime.datetime.strptime(timestr, '%Y-%m-%d %H:%M:%S') 39 #createtime 40 createtime = createday.strftime('%Y%m%d%H%M') 41 delta = datetime.timedelta(minutes=granulityPeriods) 42 #createtime 43 #文件名开始时间 44 starttime = createday.strftime('%Y%m%d.%H%M') 45 #csv文件中collecttime:201204211100 46 47 48 createday = createday + delta 49 50 #文件名中endtime 51 52 endtime = createday.strftime('%Y%m%d.%H%M') 53 #csv文件名中endtime 54 modifycollecttime = createday.strftime('%Y%m%d%H%M') 55 56 newfilenametime = starttime+"+0800-"+endtime+"+0800" 57 58 59 60 find_file=re.compile(r".xml$") 61 for root ,dirs,files in os.walk(oridir): 62 63 for file in files: 64 if find_file.search(file): 65 filename = "%s"%(file) 66 inputpath = "%s"%(root+'/'+filename) 67 #inputpath = oridir+'/'+filename 68 print inputpath 69 #wangfanfan 70 print filename 71 fileprefix=filename[0:22] 72 73 filesuffix=filename[59:-4] 74 print fileprefix 75 print filesuffix 76 #wangfanfan 77 78 outfile = fileprefix+newfilenametime + filesuffix 79 print outfile 80 outputfile = outputdir+"/"+outfile+".xml" 81 print outputfile
                #复制文件
    82 shutil.copyfile(inputpath, outputfile) 83 84          #将原始xml文件压缩后删除 85 f_in = open(outputfile,'rb') 86 targetname=outputfile+".gz" 87 f_out = gzip.open(targetname,'wb') 88 f_out.writelines(f_in) 89 f_out.close() 90 f_in.close() 91 92 os.remove(outputfile) 93 94 95 96 97 98 99 100 101 #读取配置的csv文件 102 def readpath(oripath): 103 104 pathlist = [] 105 106 fp = open(oripath,'r') 107 for line in fp: 108 print line 109 line = line.strip(' ') 110 paths = [] 111 paths = line.split(',') 112 pathdic = {} 113 pathdic["ori"] = paths[0] 114 pathdic["target"] = paths[1] 115 if not os.path.exists(paths[1]): 116 os.makedirs(paths[1]) 117 pathlist.append(pathdic) 118 119 return pathlist 120 121 122 123 124 125 126 127 128 129 130 tdoripath = "/tomcat/***/CREATE_DATA/omcdatapathTDPM.csv" 131 132 133 134 def runBySystemTime(): 135 136 137 start = time.clock() 138 139 nowtime = time.strftime("%Y-%m-%d %H:%M:%S") 140 timestr = nowtime 141 142 #gsmpathlist = readpath(tdoripath) 143 tdpathlist = readpath(tdoripath) 144 145 granulityPeriods = 15 146 147 for j in range(len(tdpathlist)): 148 path ={} 149 path = tdpathlist[j] 150 ztetd15data(timestr,granulityPeriods,path.get("ori"),path.get("target")) 151 152 153 154 finish = time.clock() 155 156 print "finished,couse:" 157 print (finish-start) 158 #time.sleep(60*60) 159 160 161 162 def runByDuration(begintime,endtime,durantion): 163 164 165 print begintime 166 167 while begintime <= endtime: 168 169 timestr =begin_time; 170 171 pathlist = readpath(oripath) 172 173 for j in range(len(pathlist)): 174 path ={} 175 path = pathlist[j] 176 ztegsm60data(timestr,granulityPeriods,path.get("ori"),path.get("target")) 177 daytime = datetime.datetime.strptime(begintime, '%Y-%m-%d %H:%M:%S') 178 delta = datetime.timedelta(minutes=durantion) 179 daytime = daytime + delta 180 begintime = daytime.strftime('%Y-%m-%d %H:%M:%S') 181 else: 182 print "end of while"; 183 184 185 186 188 granulityPeriods = 60 189 #oripath = "C:/Users/Administrator/Desktop/python_wff/omcdatapathTDPM.csv" 190 #开始处理时间 191 begin_time = '2013-02-16 01:00:00' 192 #结束处理时间 193 end_time = '2013-02-17 01:00:00' 194 195 model = 2 196 197 if model == 1 : 198 runByDuration(begin_time,end_time,15) 199 elif model == 2 : 200 runBySystemTime() 201 else: 202 print "wrong args!" 203 204


    读取csv文件的代码和上面类似。
     1 def ztegsm60data(timestr,granulityPeriods,oridir,outputdir):
     2     
     3     outpath = outputdir.strip()
     4     
     5     if not os.path.exists(outpath):
     6         os.makedirs(outpath)
     7 
     8     
     9     
    10     createday = datetime.datetime.strptime(timestr, '%Y-%m-%d %H:%M:%S')
    11 
    12     delta = datetime.timedelta(minutes=granulityPeriods)
    13 
    14     #文件名开始时间
    15     starttime = createday.strftime('%d%b%Y_%H%M')
    16     #csv文件中collecttime:201204211100
    17     
    18     
    19     createday = createday + delta
    20     
    21     #文件名中endtime  
    22     endtime = createday.strftime('%d%b%Y_%H%M')
    23     #csv文件名中endtime 
    24     modifycollecttime = createday.strftime('%Y%m%d%H%M')
    25     
    26     newfilenametime = starttime+'-'+endtime
    27 
    28 
    29     
    30     find_file=re.compile(r".csv$")
    31     for root ,dirs,files in os.walk(oridir):
    32 
    33         for file in files:
    34             if find_file.search(file):
    35                 filename = "%s "%(file)                
    36                 inputpath = "%s "%(root+'/'+filename)
    37                 
    38                 #wangfanfan
    39                 fileprefix=filename[0:-34]
    40                 #wangfanfan
    41                 
    42                 outfile = fileprefix+newfilenametime + ".csv"
    43                 
    44                 outputfile = outpath+'/'+outfile
    45                 
    46                 #写入第一行,字段名信息
    47                 reader = csv.reader(open(inputpath.strip(), 'rb')) 
    48                 header = reader.next()
    49                 print inputpath
    50                 
    51                 writer = csv.writer(open(outputfile.strip(),'wb'))
    52                 writer.writerow(header)
    53                 print outputfile
    54                 
    55                 #修改时间相关的字段的内容
    56                 for row in reader:
    57                     row[0] = modifycollecttime
    58                     writer.writerow(row)

    最难的是字符串到datetime的类型转换。还没有搞懂,只是在那试啊试啊,怎么走的通怎么走。
  • 相关阅读:
    Dubbo-admin管理平台搭建
    Zabbix监控Zookeeper健康状况
    Redis-stat 的安装与使用
    Jenkins配置基于角色的项目权限管理
    云计算的三种服务模式:IaaS,PaaS和SaaS
    PRC远程过程调用
    解决linux中ssh登录Warning:Permanently added (RSA) to the list of known hosts
    Maven仓库—Nexus环境搭建及使用
    SecureCRT使用本地公钥 SSH 免密码登录Linux
    Linux内存管理机制
  • 原文地址:https://www.cnblogs.com/wangfantasy/p/3540184.html
Copyright © 2020-2023  润新知