Operation on Excel by Python
2015-12-21 08:50
691 查看
The whole integrated program just below:
Reference:
Ref 1:
http://www.crifan.com/python_append_new_data_into_existing_excel_xls_file/
http://blog.chinaunix.net/uid-21222282-id-3420444.html
http://www.xuebuyuan.com/1436412.html
http://www.jb51.net/article/60510.htm
http://www.tuicool.com/articles/BFFbUvu
Ref 2:
http://blog.csdn.net/a491057947/article/details/47614263
http://www.cnblogs.com/lhj588/archive/2012/01/06/2314181.html
http://huaxia524151.iteye.com/blog/1173828
http://blog.csdn.net/hongqiang200/article/details/38171517
http://blog.csdn.net/five3/article/details/7034826
Ref 3:
http://www.cnblogs.com/snake-hand/p/3153158.html
http://download.csdn.net/download/u013634684/9074603
http://zhaojing366.blog.163.com/blog/static/952384020124311071392/
http://biotopiblog.sinaapp.com/2014/06/python%E8%AF%BB%E5%86%99excel%E5%A6%82%E4%BD%95%E4%BF%9D%E7%95%99%E5%8E%9F%E6%9C%89%E6%A0%BC%E5%BC%8F/
http://blog.csdn.net/mr__fang/article/details/7089581
Ref 4:
Global Variable definition:
#-*-coding:utf-8-*- ''' Create on 2015/11/16 9:05:59 @author: Chen Yu in RockChip Internship ''' import os import sys import re import string import math import win32api import win32process import win32event import xlrd import xlwt from xlutils.copy import copy from subprocess import Popen,PIPE # processing folder path dirGood = r"E:\ErrorConcealment\Sequence\Sequence_Bat_Good" dirCopy = r"E:\ErrorConcealment\Sequence\Sequence_Bat" dirFirstBatch = r"E:\ErrorConcealment\Sequence\Sequence_Bat\SmoothFile" global columnExcel columnExcel = 0 def MyGetFileList(dir, filelist): if os.path.isdir(dir): for s in os.listdir(dir): if re.match(r"([\s\S]*)\.yuv", s): filelist.append(s) return filelist def CalculateForTwoFolder(fileList1, fileList2, dir1, dir2, directive, workbook): for f1 in fileList1: for f2 in fileList2: if f1 == f2: if directive == 1: CalculateSSIMForTwoYUVs(f1, f2, dir1, dir2, workbook) elif directive == 0: CalculatePSNRForTwoYUVs(f1, f2, dir1, dir2, workbook) else: print "---------------------------Sorry, Ur directive is wrong------------------------------\n" print "---------------------------0: Count PSNR for two YUV files---------------------------\n" print "---------------------------1: Count SSIM for two YUV files---------------------------\n" def CalculateSSIMForTwoYUVs(f1, f2, dir1, dir2, newWb): d1 = dir1 + '\\' + f1 d2 = dir2 + '\\' + f2 result = re.findall("([\s\S]*)\_(\d+)x(\d+)\_([\s\S]*)",d1) storagePath = re.findall("([\s\S]*)\.yuv", d2) global columnExcel rowExcel = 0 sheetName = newWb.get_sheet(1) ssim = 0 ssimList = [] AvaregeSsim = 0 AverageSsimNum = 0 frameNum = 0 for line in result: width = string.atoi(line[1]) height = string.atoi(line[2]) chunkSize = (width * height * 3) >> 1 Area = width * height frame0 = [range(height) for i in range(width)] frame1 = [range(height) for i in range(width)] if (os.path.isfile(d1) and os.path.isfile(d2)): file1Object = open(d1, 'rb') file2Object = open(d2, 'rb') print d1 print d2 sheetName.write(rowExcel, columnExcel, d1) rowExcel += 1 sheetName.write(rowExcel, columnExcel, d2) rowExcel += 1 SumOfDev = 0 stdDev = 0 while True: chunk0 = file1Object.read(chunkSize) chunk1 = file2Object.read(chunkSize) if not chunk0: break if not chunk1: break l0 = list(chunk0) l1 = list(chunk1) for i in range (Area): if i: ck0 = ord(l0[i]) ck1 = ord(l1[i]) frame0[i % width][i / width] = ck0 frame1[i % width][i / width] = ck1 ssim = Ssim(frame0, frame1, width, height) if ssim < 1: AvaregeSsim += ssim ssimList.append(ssim) AverageSsimNum += 1 sheetName.write(rowExcel, columnExcel, ssim) newWb.save("PSNR&&SSIM.xls") rowExcel += 1 print ("------------------------The %-3d------------------- frame's SSIM is | %f \n" % (frameNum, ssim)) frameNum += 1 if AverageSsimNum != 0: AvaregeSsim /= AverageSsimNum for itemSSIM in ssimList: SumOfDev += ((itemSSIM - AvaregeSsim) ** 2) stdDev = math.sqrt(SumOfDev*1.0/AverageSsimNum) sheetName.write(rowExcel, columnExcel, AverageSsimNum) newWb.save("PSNR&&SSIM.xls") rowExcel += 1 sheetName.write(rowExcel, columnExcel, stdDev) newWb.save("PSNR&&SSIM.xls") rowExcel += 1 newWb.save("PSNR&&SSIM.xls") print ("\n------------------------The Average SSIM for %-3d frames is %f------------------- \n" % (AverageSsimNum, AvaregeSsim)) print ("\n------------------------The Standard Deviation is %f------------------- \n\n\n" % (stdDev)) else: print ("\n---------------------------------------There is NO error in this YUV-------------------------\n\n\n") newWb.save("PSNR&&SSIM.xls") columnExcel += 1 file1Object.close() file2Object.close() def CalculatePSNRForTwoYUVs(f1, f2, dir1, dir2, newWb): d1 = dir1 + '\\' + f1 d2 = dir2 + '\\' + f2 global columnExcel rowExcel = 0 sheetName = newWb.get_sheet(0) result = re.findall("([\s\S]*)\_(\d+)x(\d+)\_([\s\S]*)",d1) storagePath = re.findall("([\s\S]*)\.yuv", d2) for line in result: width = string.atoi(line[1]) height = string.atoi(line[2]) Area = width * height chunkSize = (Area * 3) >> 1 # 420 frameNum = 0 MSE = 0 MAXDivMSE = 0 PSNR = 0 AveragePSNR = 0 CountAveragePSNRFrame = 0 ListPSNR = [] if (os.path.isfile(d1) and os.path.isfile(d2)): file1Object = open(d1, 'rb') file2Object = open(d2, 'rb') print d1 print d2 sheetName.write(rowExcel, columnExcel, d1) rowExcel += 1 sheetName.write(rowExcel, columnExcel, d2) rowExcel += 1 while True: chunk1 = file1Object.read(chunkSize) chunk2 = file2Object.read(chunkSize) if not chunk1: break if not chunk2: break sumOfMSE = 0 l1 = list(chunk1) l2 = list(chunk2) for i in range (Area): ck1 = ord(l1[i]) ck2 = ord(l2[i]) sumOfMSE += (abs(ck1 - ck2)**2) MSE = math.sqrt(sumOfMSE*1.0/Area) if MSE != 0: MAXDivMSE = 255 / MSE else: MAXDivMSE = 0 if MAXDivMSE > 0: PSNR = 20 * math.log10(MAXDivMSE) else: PSNR = 0 print ("------------------------The %-3d------------------- frame's PSNR is | %f \n" % (frameNum, PSNR)) sheetName.write(rowExcel, columnExcel, PSNR) newWb.save("PSNR&&SSIM.xls") rowExcel += 1 frameNum += 1 if PSNR != 0: CountAveragePSNRFrame += 1 AveragePSNR += PSNR ListPSNR.append(PSNR) AveragePSNR = 0 if CountAveragePSNRFrame == 0 else (AveragePSNR*1.0/CountAveragePSNRFrame) SumOfDev = 0 stdDev = 0 if CountAveragePSNRFrame != 0: for itemPSNR in ListPSNR: SumOfDev += ((itemPSNR - AveragePSNR) ** 2) stdDev = math.sqrt(SumOfDev*1.0/CountAveragePSNRFrame) print ("------------------------The Average PSNR is %f-------------------\n" % (AveragePSNR)) print("----------------------The Standard Deviation is %f----------------------\n" % (stdDev)) sheetName.write(rowExcel, columnExcel, AveragePSNR) newWb.save("PSNR&&SSIM.xls") rowExcel += 1 sheetName.write(rowExcel, columnExcel, stdDev) newWb.save("PSNR&&SSIM.xls") rowExcel += 1 file1Object.close() file2Object.close() newWb.save("PSNR&&SSIM.xls") print "--------------------------------------------------------------------\n\n" columnExcel += 1 def BatchCalculate(directive): if(os.path.isfile("PSNR&&SSIM.xls") == False): DataFile = xlwt.Workbook() NewSheetForPSNR = DataFile.add_sheet("PSNR", cell_overwrite_ok = True) NewSheetForSSIM = DataFile.add_sheet("SSIM", cell_overwrite_ok = True) DataFile.save("PSNR&&SSIM.xls") book = xlrd.open_workbook('PSNR&&SSIM.xls', formatting_info = True) newWb = copy(book) FileListOfGood = MyGetFileList(dirGood, []) # FileListOfCopy = MyGetFileList(dirCopy, []) FileListOfFirstBatch = MyGetFileList(dirFirstBatch, []) # FileListOfSecondBatch = MyGetFileList(dirSecondBatch, []) # CalculateForTwoFolder(FileListOfGood, FileListOfCopy, dirGood, dirCopy, directive) CalculateForTwoFolder(FileListOfGood, FileListOfFirstBatch, dirGood, dirFirstBatch, directive, newWb) # CalculateForTwoFolder(FileListOfGood, FileListOfSecondBatch, dirGood, dirSecondBatch, directive) def SsimEnd1(s1, s2, ss, s12): ssim_c1 = (int)(.01*.01*255*255*64 + .5) ssim_c2 = (int)(.03*.03*255*255*64*63 + .5) vars = ss*64 - s1*s1 - s2*s2 covar = s12*64 - s1*s2 return (float)(2*s1*s2 + ssim_c1) * (float)(2*covar + ssim_c2)\ / ((float)(s1*s1 + s2*s2 + ssim_c1) * (float)(vars + ssim_c2)); # Here I make the decision that for a list list[x][y], x stands column(like a picture) def SsimEnd4(l1, l2, width): ssim = 0 for i in range(width): ssim += SsimEnd1(l1[i][0] + l1[i + 1][0] + l2[i][0] + l2[i + 1][0], l1[i][1] + l1[i + 1][1] + l2[i][1] + l2[i + 1][1], l1[i][2] + l1[i + 1][2] + l2[i][2] + l2[i + 1][2], l1[i][3] + l1[i + 1][3] + l2[i][3] + l2[i + 1][3]) return ssim # Size is 32 for pix1 and pix2, and sums is [2][4] def ssim_4x4x2_core( pix1, pix2, sums): for z in range(2): s1 = 0 s2 = 0 ss = 0 s12 = 0 for x in range(16): a = pix1[x + (z << 4)] b = pix2[x + (z << 4)] s1 += a s2 += b ss += a*a ss += b*b s12 += a*b sums[z][0] = s1 sums[z][1] = s2 sums[z][2] = ss sums[z][3] = s12 # Calculate Two Frame's SSIM def Ssim(pixel0, pixel1, width, height): Sums0 = [range(4) for i in range((width >> 2) + 3)] # width x 4( column x row = width x height ) Sums1 = [range(4) for i in range((width >> 2) + 3)] width = (width >> 2) height = (height >> 2) z = 0 ssim = 0.0 pix0Ck = range(32) pix1Ck = range(32) sums0 = [range(4) for i in range(2)] sums1 = [range(4) for i in range(2)] for y in range(1,height): while(z <= y): for x in range(0, width, 2): for i in range(4): for j in range(8): if j >= 4: pix0Ck[(i << 2) + j + 12] = pixel0[(x << 2) + j][(z << 2) + i] pix1Ck[(i << 2) + j + 12] = pixel1[(x << 2) + j][(z << 2) + i] else: pix0Ck[(i << 2) + j] = pixel0[(x << 2) + j][(z << 2) + i] pix1Ck[(i << 2) + j] = pixel1[(x << 2) + j][(z << 2) + i] if z % 2 == 0: ssim_4x4x2_core(pix0Ck, pix1Ck, sums0) Sums0[x] = sums0[0] Sums0[x + 1] = sums0[1] else: ssim_4x4x2_core(pix0Ck, pix1Ck, sums1) Sums1[x] = sums1[0] Sums1[x + 1] = sums1[1] z += 1 for x in range(0, width - 1, 4): ssim += SsimEnd4(Sums0[x : x + 5], Sums1[x : x + 5], min(4, width - 1 - x)) return 0 if (width - 1 == 0) or (height - 1 == 0) else ssim * 1.0/((width - 1.0)*(height - 1.0)) if __name__ == "__main__": BatchCalculate(0) BatchCalculate(1)
Reference:
Ref 1:
http://www.crifan.com/python_append_new_data_into_existing_excel_xls_file/
http://blog.chinaunix.net/uid-21222282-id-3420444.html
http://www.xuebuyuan.com/1436412.html
http://www.jb51.net/article/60510.htm
http://www.tuicool.com/articles/BFFbUvu
Ref 2:
http://blog.csdn.net/a491057947/article/details/47614263
http://www.cnblogs.com/lhj588/archive/2012/01/06/2314181.html
http://huaxia524151.iteye.com/blog/1173828
http://blog.csdn.net/hongqiang200/article/details/38171517
http://blog.csdn.net/five3/article/details/7034826
Ref 3:
http://www.cnblogs.com/snake-hand/p/3153158.html
http://download.csdn.net/download/u013634684/9074603
http://zhaojing366.blog.163.com/blog/static/952384020124311071392/
http://biotopiblog.sinaapp.com/2014/06/python%E8%AF%BB%E5%86%99excel%E5%A6%82%E4%BD%95%E4%BF%9D%E7%95%99%E5%8E%9F%E6%9C%89%E6%A0%BC%E5%BC%8F/
http://blog.csdn.net/mr__fang/article/details/7089581
Ref 4:
Global Variable definition:
global a a = 3 def Fuc(): global a print a a = a + 1 if __name__ == "__main__": global a for i in range(10): Fuc()print 'hello' print a
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Excel 曝出 Power Query 安全漏洞,1.2 亿用户易受远程 DDE 攻击
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例