处理许多评估?

2024-06-16 15:46:12 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有更优雅的方法来处理评估许多案例?你知道吗

这看起来太难看了,也不是最有效的。有经验的Python3程序员吗 用巫毒术和列表理解来做密集的评估?你知道吗

示例文件位于底部。你知道吗

#! /usr/bin/env python3

#This utility attempts to parse the output text files generated by dcp_inspect
#for faster inspection and when attending to multiple DCP inspections.
#dcp_inspect_parse runs on Python3.x (Though I am testing on 3.3)
#
#
#
#
#
#

import glob
import os
import sys
print(os.getcwd())


cpl                  = []
content              = []
contentkind          = []
container            = []
errors               = [] 
package              = []
summary              = []
mainsound            = []
mainpicture          = []
encryption           = []
duration             = []
fsp                  = []
dimensiontype        = []
aspect               = []
filesize             = [2]
audio                = []
cpltype              = []

dir= []
dir=input("Please enter directory location of dcp_inspect output***\n")

print('Changing directories')
os.chdir(dir)
print(os.getcwd())

print('Attempting to open file(s) in directory:\n')
print(dir,'\n')

for file in glob.glob("*"):
    try:
        newfile = file
        print("Scanning...\t\t\t\t\t\t", newfile)
        data = open(newfile)
        for each_line in data:
            if 'summary'in each_line:
                summary.extend(each_line.split())
            elif 'Errors' in each_line:
                errors=(each_line.split())
            elif 'Package with total size'in each_line:
                if 'Bytes 0' in each_line:
                    continue
                else:
                    temp =[]
                    temp.extend(each_line.split())
                    #print(len(temp))
                    filesize=(temp.pop()+' '+temp.pop())
                    #print('size =',size)
            elif 'MainSound'in each_line:
                if 'audio' in each_line:
                    if '24bps' in each_line:
                        if '48kHz' in each_line:
                            if '6ch' in each_line:
                                if '16ch' in each_line:
                                    temp = []
                                    temp.extend(each_line.split(','))
                                    audio = '16ch 48kHz 24bps'

                                elif '6ch' in each_line:
                                    temp = []
                                    temp.extend(each_line.split(','))
                                    audio = '6ch 48kHz 24bps'

                            elif '7ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '7ch 48kHz 24bps'

                            elif '8ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '8ch 48kHz 24bps'

                            elif '10ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '10ch 48kHz 24bps'

                            elif '11ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '11ch 48kHz 24bps'

                            elif '12ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '12ch 48kHz 24bps'

                            elif '13ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '13ch 48kHz 24bps'

                            elif '14ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '14ch 48kHz 24bps'

                            elif '15ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '15ch 48kHz 24bps'

                            elif '16ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '16ch 48kHz 24bps'

                            elif '17ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '17ch 48kHz 24bps'

                            elif '18ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '18ch 48kHz 24bps'

                            elif '19ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '19ch 48kHz 24bps'

                            elif '20ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '20ch 48kHz 24bps'

                            elif '21ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '21ch 48kHz 24bps'

                            elif '22ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '22ch 48kHz 24bps'

                            elif '23ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '23ch 48kHz 24bps'

                            elif '24ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '24ch 48kHz 24bps'

                        elif '96kHz' in each_line:
                            audio = 'unknown format, bitrate, etc'
                            if '6ch'in each_line:
                                if '16ch' in each_line:
                                    temp = []
                                    temp.extend(each_line.split(','))
                                    audio = '16ch 96kHz 24bps'

                                elif '26ch' in each_line:
                                    temp = []
                                    temp.extend(each_line.split(','))
                                    audio = '26ch 96kHz 24bps'

                                elif '6ch' in each_line:
                                    temp = []
                                    temp.extend(each_line.split(','))
                                    audio = '6ch 96kHz 24bps'

                            elif '7ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '7ch 96kHz 24bps'

                            elif '8ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '8ch 96kHz 24bps'

                            elif '9ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '9ch 96kHz 24bps'

                            elif '10ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '10ch 96kHz 24bps'

                            elif '11ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '11ch 96kHz 24bps'

                            elif '12ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '12ch 96kHz 24bps'

                            elif '13ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '13ch 96kHz 24bps'

                            elif '14ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '14ch 96kHz 24bps'

                            elif '15ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '15ch 96kHz 24bps'

                            elif '16ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '16ch 96kHz 24bps'

                            elif '17ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '17ch 96kHz 24bps'

                            elif '18ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '18ch 96kHz 24bps'

                            elif '19ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '19ch 96kHz 24bps'

                            elif '20ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '20ch 96kHz 24bps'

                            elif '21ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '21ch 96kHz 24bps'

                            elif '22ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '22ch 96kHz 24bps'

                            elif '23ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '23ch 96kHz 24bps'

                            elif '24ch'in each_line:
                                temp = []
                                temp.extend(each_line.split(','))
                                audio = '24ch 96kHz 24bps'

            elif 'MainPicture'in each_line:
                if 'pictures' in each_line:
                    temp = []
                    temp.extend(each_line.split(','))
                    container = temp[-2]
                    encryption= temp[-3]

            elif 'CPL Id:'in each_line:
                cpl=(each_line.split())

            elif 'CPL type: 'in each_line:
                cpltype=(each_line.split())
                cpltype = cpltype[2]

            elif 'ContentKind: 'in each_line:
                contentkind=(each_line.split())
                contentkind = contentkind[1]

            elif 'ContentTitleText:'in each_line:
                content=(each_line.split(':'))
                content = content[1]



        for x in range(len(summary)):
            if 'fps' in summary[x]:
                #print(summary[(x-1)],'near fps')
                #print(summary[x],'near fps')
                fps = summary[(x-1)]
                duration = summary[(x-2)].strip()


            elif 'summary:' in summary[x]:
                #print(summary[(x)])
                content = summary[(x+1)]
                content.strip(',')

            elif '2D' in summary[x]:
                #print(summary[(x)], 'found')
                dimensiontype = summary[(x)]

                aspect = summary[(x+1)].strip(',')
            elif '3D' in summary[x]:
                #print(summary[(x)], 'found')
                dimensiontype = summary[(x)]
                aspect = summary[(x+1)]


        print('Container:             \t\t',container.strip())        
        print('CPL Type:              \t\t',cpltype)
        print('Duration:              \t\t',duration.strip(','))
        print('Frame Rate:            \t\t',fps)
        print('Aspect Ratio:          \t\t',aspect.strip(','))
        print('Dimension:             \t\t',dimensiontype.strip(',')) 
        print('Content Title:         \t\t',content.strip(',').strip('""'))
        print('Audio for DCP:         \t\t', audio)
        print('Package size:          \t\t',filesize)
        print('Encryption status:     \t\t',encryption.upper().strip())       
        print('CPL ID:                \t\t', cpl[2])  
        print('Content Kind:          \t\t',contentkind.upper()) 
        print('\n')
        print('There are',errors[1],'Errors and',errors[3],'hints for', content.strip(','))
        if errors[1] != '0':
            print('could be issues\n')
        else:
            print('This DCP appears to be OK\n')
            #print(summary)


        data.close()

    except:
        print("Exception Encountered")
        pass

找到1个资产映射 AM 7599203f-a73f-4c55-b967-93c3061e10ea:过夜者\U 01/Interop \U 20140108/ASSETMAP AM 7599203f-a73f-4c55-b967-93c3061e10ea列出了4项资产: cef846b8-8f85-4cb4-9cb8-f39e53ebe013:夜宿制\u 01/Interop \u 20140108/cef846b8-8f85-4cb4-9cb8-f39e53ebe013_pcm.mxf格式 c2cb9f04-83bf-4829-b4cf-e9963dbaa0d3:过夜者\U 01/Interop \U 20140108/c2cb9f04-83bf-4829-b4cf-e9963dbaa0d3 \U j2c.mxf d28cfbbd-9cc7-4cd9-ac18-66fc031b0118:过夜者\U 01/Interop \U 20140108/d28cfbbd-9cc7-4cd9-ac18-66fc031b0118_cpl.xml文件 edc7e9bc-7397-4922-85e2-4ebf5b2d710a:过夜者\U 01/Interop \U 20140108/edc7e9bc-7397-4922-85e2-4ebf5b2d710a_pkl.xml文件 资产映射7599203f-a73f-4c55-b967-93c3061e10ea列出1件包装: 提供PKL文件:edc7e9bc-7397-4922-85e2-4ebf5b2d710a:/media/Overnighters\u 01/Interop\u 20140108/edc7e9bc-7397-4922-85e2-4ebf5b2d710a_pkl.xml文件你知道吗

找到1个包 提供PKL文件:edc7e9bc-7397-4922-85e2-4ebf5b2d710a:/media/Overnighters\u 01/Interop\u 20140108/edc7e9bc-7397-4922-85e2-4ebf5b2d710a_pkl.xml文件你知道吗

PKL edc7e9bc-7397-4922-85e2-4ebf5b2d710a:/媒体/过夜者\u 01/Interop \u 20140108/edc7e9bc-7397-4922-85e2-4ebf5b2d710a_pkl.xml文件 PKL edc7e9bc-7397-4922-85e2-4ebf5b2d710a:架构检查:确定 PKL edc7e9bc-7397-4922-85e2-4ebf5b2d710a:未找到签名节点 PKL edc7e9bc-7397-4922-85e2-4ebf5b2d710a:注释文本:过夜者\U 20140108 PKL edc7e9bc-7397-4922-85e2-4ebf5b2d710a列出了3项资产 cef846b8-8f85-4cb4-9cb8-f39e53ebe013:应用程序/x-smpte-mxf;asdcpKind=声音: d28cfbbd-9cc7-4cd9-ac18-66fc031b0118:text/xml;asdcpKind=CPL:Overnighters\u 01/Interop\u 20140108/d28cfbbd-9cc7-4cd9-ac18-66fc031b0118_cpl.xml文件 […]g哈希值:0%[]ETA--::--:---经过--::--]g哈希值:16%[====]ETA 00:00:00经过00:00:00A 00:00:00经过00:00:00 PKL edc7e9bc-7397-4922-85e2-4ebf5b2d710a:封装大小:93.9 GB PKL edc7e9bc-7397-4922-85e2-4ebf5b2d710a列出了1个组成部分 CPL文件存在:d28cfbbd-9cc7-4cd9-ac18-66fc031b0118:/media/Overnighters\u 01/Interop\u 20140108/d28cfbbd-9cc7-4cd9-ac18-66fc031b0118_cpl.xml文件你知道吗

找到1篇作文 CPL文件存在:d28cfbbd-9cc7-4cd9-ac18-66fc031b0118:/media/Overnighters\u 01/Interop\u 20140108/d28cfbbd-9cc7-4cd9-ac18-66fc031b0118_cpl.xml文件你知道吗

CPL d28cfbbd-9cc7-4cd9-ac18-66fc031b0118:卷1:音频分析。。。 CPL d28cfbbd-9cc7-4cd9-ac18-66fc031b0118:卷1:音频分析:完成 CPL d28cfbbd-9cc7-4cd9-ac18-66fc031b0118:模式检查:确定 CPL d28cfbbd-9cc7-4cd9-ac18-66fc031b0118:未找到签名节点 CPL Id:d28cfbbd-9cc7-4cd9-ac18-66fc031b0118 CPL文件:/media/Overnighters\u 01/Interop\u 20140108/d28cfbbd-9cc7-4cd9-ac18-66fc031b0118_cpl.xml文件 CPL类型:Interop(http://www.digicine.com/PROTO-ASDCP-CPL-20040511#) ContentTitleText:夜宿\u FTR\u EN\u 51\u 2K\u 20140108\u CLO\u OV AnnotationText:[空] ContentKind:功能 发布日期:2014-01-08T17:49:36-08:00(2014年1月8日星期三17:49) 发行人:Colorflow Digital 创建者:Colorflow 卷数:1 卷轴1: 145729 01:41:12+01@24.0 c2cb9f04主图片(MXF互操作,01:43:53+18,纯文本,1920x1080,图片) 145729 01:41:12+01@24.0 cef846b8主声音(MXF互操作,01:43:53+18,纯文本,6ch 48kHz 24bps,[失败],[失败],音频) 总持续时间: 145729 01:41:12+01 @ 24.0 CPL d28cfbbd-9cc7-4cd9-ac18-66fc031b0118:合成摘要:“OVERNIGHTERS\u FTR\u F\u EN\u 51\u 2K\u 20140108\u CLO\u OV”,互操作,明文,2D,高清,高清,01:41:12+01,24.0 fps 合成完成

提示:CPL d28cfbbd-9cc7-4cd9-ac18-66fc031b0118:第1卷:主图片具有非DCI纵横比1.778(1920x1080,高清):建议使用适当的非标准掩蔽进行播放 提示:CPL d28cfbbd-9cc7-4cd9-ac18-66fc031b0118:第1卷:主图片具有非DCI像素尺寸(1920x1080,高清) 提示:CPL d28cfbbd-9cc7-4cd9-ac18-66fc031b0118:命名约定:ContentTitleText“OVERNIGHTERS\u FTR\u F\u EN\u 51\u 2K\u 20140108\u CLO\u OV”缺少某些部分 提示:CPL d28cfbbd-9cc7-4cd9-ac18-66fc031b0118:命名约定:9部分匹配:设施:“CLO”电影标题:“OVERNIGHTERS”内容类型:“FTR”纵横比:“F”音频类型:“51”分辨率:“2K”工作室:“EN”日期:“20140108”包装类型:“OV” 提示:CPL d28cfbbd-9cc7-4cd9-ac18-66fc031b0118:命名约定:缺少2个部分:语言、区域和等级 提示:CPL d28cfbbd-9cc7-4cd9-ac18-66fc031b0118:命名约定:部件纵横比声明为平坦,但组成纵横比为HD 提示:CPL d28cfbbd-9cc7-4cd9-ac18-66fc031b0118:命名约定:部件分辨率要求2K,但组成分辨率为HD 信息:CPL d28cfbbd-9cc7-4cd9-ac18-66fc031b0118:Composition OVERNIGHTERS\u FTR\u F\u EN\u 51\u 2K\u 20140108\u CLO\u OV于3天前发布 信息:dcp\ U inspect v1.2013.12.16 2014年1月11日星期六10:57(00:01:18:46) 信息:已检查:/media 信息:找到1个总大小为93.9 GB的包 信息:找到1个Assetmap、1个包(0个签名)、1个合成(0个签名、1个明文/0 KDMs必需) 信息:0个错误,7个提示


Tags: 文件inlinesummaryaudiotempspliteach
2条回答

您的程序可以通过分解

temp = []
temp.extend(each_line.split(','))

从每个elif开始,改为在elif节的上方或下方写一次。你知道吗

通常,这样的解析可以通过将源代码拆分成块,然后将这些块用作函数字典的键来改进(或者,在您的例子中,字符串字典也可以工作,因为所有的终端函数只在它们的字符串中不同)。有关示例,请参见实例this blog post。只要输入是有规律的,这可能是实现良好重构的最佳途径。与流控制不同,数据结构是围绕将输入映射到输出的数据结构构建一个小程序,而不是在程序代码中嵌入映射的大程序。你知道吗

您可以对以下值使用regex match,而不是测试每个案例:

m = re.search('([0-9]+)bps', each_line)
if m is None:
    bps = None
else:
    bps = int(m.group(1))

m = re.search('([0-9]+)ch', each_line)
if m is None:
    channels = None
else:
    channels = int(m.group(1))

m = re.search('([0-9]+)kHz', each_line)
if m is None:
    bandwidth = None
else:
    bandwidth = int(m.group(1))

# if still needed
audio = '%ich %ikHz %ibps' % (channels, bandwidth, bps)

如果整行的格式与我看到的here相同,也可以匹配整行:

patt = '''MainSound\s*\(.*([0-9]+) channels, ([0-9]+) kHz, ([0-9]+) bps, audio\)'''
m = re.search(patt, each_line)
if m:
    channels, bandwidth, bps = m.groups()

或者,如果您确切地知道行的外观,您可以使用PyParsing。你知道吗

相关问题 更多 >