调用类中方法的方法存在问题

时间:2014-02-07 21:04:07

标签: python python-3.x

为什么这些方法不像我期望的那样工作?我可以立即打印一条线 但是,该方法似乎没有其他功能。

我正在尝试

  1. 分配目录
  2. 使用glob
  3. 迭代文件
  4. 为目录
  5. 中的每个文件分配文件处理程序
  6. 使用方法摘要,然后调用一系列相互调用的其他方法。
  7. 排序和解析文件
  8. 打印排序和解析的结果。
  9. 代码:

    #! /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 
    import logging
    import os
    import re
    import sys
    
    from glob import glob
    
    logging.basicConfig(level=logging.DEBUG)
    
    class DcpParser:
        """Parses DCP Inspector output files, and writes summary files to a
        directory whose path is supplied at construction."""
    
    
    
        def parse(self, dir):
            """Parses all files in the current directory."""
            cpl                  = []
            content              = []
            contentkind          = []
            container            = []
            errors               = [] 
            package              = []
            summary              = []
            mainsound            = []
            mainpicture          = []
            encryption           = []
            duration             = []
            fsp                  = []
            dimensiontype        = []
            aspect               = []
            filesize             = [2]
            audio                = []
            cpltype              = []
            os.chdir(dir)
            files = glob('*')
            logging.debug("Found files: %s", files)
            for file in files:
                try:
                    with open(file) as data:
                        logging.debug("Opening file: %s", data)
                        print("Scanning...\t\t\t", file)
                        for each_line in data:
                            #self.prints()
                            self.file_summary()
                            #self.audio()
    
                except:
                    pass
    
    
    
        def prints(self):
    
                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')       
    
    
        def file_summary(self):
            print('made it to summary')
            self.file_audio()
            for each_line in data:
                if 'summary'in each_line:
                    summary.extend(each_line.split())
                    print(summary.extend(each_line.split()))
                    for x in range(len(summary)):
                        if 'fps' in summary[x]:
                            fps = summary[(x-1)]
                            duration = summary[(x-2)].strip()
    
                        elif 'summary:' in summary[x]:
                            content = summary[(x+1)]
                            content.strip(',')
    
                        elif '2D' in summary[x]:
                            dimensiontype = summary[(x)]
                            aspect = summary[(x+1)].strip(',')
    
                        elif '3D' in summary[x]:
                            dimensiontype = summary[(x)]
                            aspect = summary[(x+1)]
    
                elif 'Errors' in each_line:
                    errors=(each_line.split())
                elif 'Package with total size'in each_line:
                    if 'Bytes 0' in each_line:
                        pass
                    else:
                        temp =[]
                        temp.extend(each_line.split())
                        filesize=(temp.pop()+' '+temp.pop())
    
    
        def file_audio(self):
             print('made it to audio')
             self.file_picture()
             for each_line in data:
    
                 if 'MainSound'in each_line:
    
                    if 'audio' in each_line:
                        m = re.search('([0-9]+)bps', each_line)
                        if m is None:
                            bps = 'bps error'
                        else:
                            bps = int(m.group(1))
    
                        m = re.search('([0-9]+)ch', each_line)
                        if m is None:
                            channels = 'channel error'
                        else:
                            channels = int(m.group(1))
    
                        m = re.search('([0-9]+)kHz', each_line)
                        if m is None:
                            bandwidth = 'bandwidth error'
                        else:
                            bandwidth = int(m.group(1))
    
                        audio = '%ich %ikHz %ibps' % (channels, bandwidth, bps)
    
    
        def file_picture(self):
            print('made it to picture')
            for each_line in data:
    
                if 'MainPicture'in each_line:
                   if 'pictures' in each_line:
                       temp = []
                       temp.extend(each_line.split(','))
                       container = temp[-2]
                       encryption= temp[-3]
    
    
    
    
        def file_cplId(self):
            print('cpl id')
            if 'CPL Id:'in each_line:
                cpl=(each_line.split())
    
    
        def file_cplType(self):
            if 'CPL type: 'in each_line:
                cpltype=(each_line.split())
                cpltype = cpltype[2]
    
        def file_contentKind(self):
            if 'ContentKind: 'in each_line:
                contentkind=(each_line.split())
                contentkind = contentkind[1]
    
        def file_contentTitleText(self):
            if 'ContentTitleText:'in each_line:
                content=(each_line.split(':'))
                content = content[1]
    
    
    
    
    
    
    
    
    
    
    if __name__ == '__main__':
        print("Input directory name: " + os.getcwd())
        default_dir = os.getenv('HOME') + '/Desktop/dcp_output'
        prompt = "Please enter the output directory name [" + default_dir + "]: "
        dir = input(prompt) or default_dir
        print("Output directory name: " + dir)
    
        parser = DcpParser()
    
        parser.parse(dir )
    

1 个答案:

答案 0 :(得分:2)

对我来说,似乎没有一个变量以self.开头,这意味着你没有任何类成员,所有变量都是相应方法中的局部变量。

同样方便的是,在代码的主要部分周围使用了try except pass,它将忽略发生的任何错误。其中一个错误是您在几个方法中访问data,这些方法既不是全局变量也不是之前在方法中分配的。

删除try except pass以进行调试,并报告发生的情况。