您的位置:首页 > 编程语言 > Python开发

Python提取HM编码结果的批处理

2017-11-03 11:28 176 查看
import re
import string
import os

f_out = open('/Users/mengwang/Downloads/HM-16.0/BDrate.txt', 'w+')

def searchResult(chunk, matchSyntax, index):
if re.search(matchSyntax, chunk):
splitWord = re.split(r'\s+', chunk)
#print chunk
#print splitWord[3]
matchWord = []
matchWord.append(splitWord[index])
return matchWord

def writeResult(result):
f_out.write("%-20s"%(result[0]))
f_out.write("%-10s"%(result[1]))
f_out.write("%-10s"%(result[2]))
f_out.write("%-10s"%(result[3]))
f_out.write("%-10s"%(result[4]))
f_out.write("\n")

rootdir = '/Users/mengwang/Downloads/HM-16.0/encResult'
list = os.listdir(rootdir)

for i in range(0,len(list)):
pathDir = os.path.join(rootdir,list[i])
if os.path.isfile(pathDir):
f = open(pathDir, 'r')
while 1:
chunk = f.readline()
if chunk == '':
break
matchWord = 'SUMMARY'
findResult = searchResult(chunk, matchWord, 0)
if findResult:
chunk1 = f.readline()
chunk2 = f.readline()
splitEncResult = re.split(r'\s+', chunk2)
print chunk2
print pathDir
BDRATE = []
BDRATE.append(splitEncResult[3])
BDRATE.append(splitEncResult[4])
BDRATE.append(splitEncResult[5])
BDRATE.append(splitEncResult[6])
BDRATE.append(pathDir)
writeResult(BDRATE)


HM的report格式和AVS不一样,AVS可以直接定位到关键字然后做完分割就可以取到想要的数据,但是HM的关键字应该是summary那一行,对应的结果再summer的下下行,像这样。

SUMMARY --------------------------------------------------------
Total Frames | Bitrate Y-PSNR U-PSNR V-PSNR YUV-PSNR
5 a 12700.6080 41.4903 43.6672 44.2743 42.1685

I Slices--------------------------------------------------------
Total Frames | Bitrate Y-PSNR U-PSNR V-PSNR YUV-PSNR
5 i 12700.6080 41.4903 43.6672 44.2743 42.1685

P Slices--------------------------------------------------------
Total Frames | Bitrate Y-PSNR U-PSNR V-PSNR YUV-PSNR
0 p nan nan nan nan nan

B Slices--------------------------------------------------------
Total Frames | Bitrate Y-PSNR U-PSNR V-PSNR YUV-PSNR
0 b nan nan nan nan nan

RVM: 0.000
Bytes written to file: 132329 (12703.584 kbps)

Total Time: 4.734 sec

对于python的格式化输出一直不太熟:

%-10s代表输出数据左对齐,右边添加占位符

%10s代表输出数据右对齐,左边添加占位符

所以采用左对齐的形式,当数据位数比较多的时候,当前输出应该留出足够多的占位符。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: