liyuping-fisher 发表于 2023-4-7 10:11:53

萌新又来求助了,代码执行后结果不稳定,我要的是第一种,但是是不是会第二种字典w...

class AQ_INFO():
    def __init__(self):
      #调用EEP_INFO的方法
      EEP_INFO.__init__(self)
      self.factoryroot_dir = self.param_dict.get('FACTORY_PACKAGE')
    def get_aq_path(self):
      #通过关键字符串定位aq路径
      search_strings = []
      search_strings.extend()
      #print("确认aq路径需要的字符串", search_strings)
      for dp, dn, filenames in os.walk(self.code_dir):
      #确认aq目录,判断当前目录是否包含了search_strings中的所有字符串
            if all(path in dp or path in filenames for path in search_strings):
                self.aq_path = dp
                #print("data:aq路径为:" + aq_path)
                return self.aq_path
    def get_aq_file(self):
      #通过PARAM_INFO类的pack_data方法获取要处理的aq文件
      files = 'aq_data'
      self.pickle_info = PARAM_INFO.pickle_data(curr_dir,files)
      #print(self.pickle_info)
      #使用列表推导式和集合(set)来拿出元组中的前面一个元素,并去重拼接得到带路径的文件名
      self.aq_file_list = list(set( for tup in self.pickle_info]))
      self.aq_path_list =
      return self.aq_path_list
    def get_aq_data(self):
      #对于给定的元组列表,可以使用列表推导式遍历每个元组,并取出其中指定位置的元素
      keys = for key in self.pickle_info]
      #取出元素后,可以对列表去重并排序,以方便后续操作。可以使用 set() 函数将列表转换为集合,并使用 sorted() 函数对集合中的元素进行排序
      search_keys = sorted(set(keys))
      #获取文件名
      names = for file in self.pickle_info]
      search_files = sorted(set())
      # 文件列表
      file_list = self.aq_path_list
      # key列表
      key_list = search_keys
      # 文件名列表
      filename_list = search_files
      # 文件名和key对应列表
      filename_key_list = self.pickle_info
      # 定义一个字典来存储key和对应的value
      aq_data_dict = {}
      # 遍历文件名和key对应列表
      for filename_key in filename_key_list:
            # 获取文件名和key
            filename, key = filename_key
            # 判断文件名是否在文件名列表中
            if filename in filename_list:
                # 获取文件在文件列表中的索引
                index = filename_list.index(filename)
                # 打开文件并查找key对应的值
                with open(file_list,'r',encoding='utf-8') as f:
                  for line in f:
                        line = line.strip()#去掉行末的换行符
                        # 如果该行以key开头,则以等号分隔,取第二个部分作为key对应的值
                        if line.startswith(key):
                            value = line.split('=').split(';').strip()
                            print(f"{filename}:{key} = {value}")
                            #将key和value存储到字典
                            aq_data_dict = value

      #注意:要写入excel的aq数据字典
      return aq_data_dict
result = AQ_INFO()
print(result.get_aq_path())
print(result.get_aq_file())
print(result.get_aq_data())

代码结果有两种情况
aq/25_50A23_N012301-008650-001
['aq/25_50A23_N012301-008650-001/amp.ini', 'aq/25_50A23_N012301-008650-001/panel_audio.ini']
amp.ini:AmpBinPath = /factory/aq/25_50A23_N012301-008650-001/AMP_RT9120.bin
panel_audio.ini:cSupportCareSoundMode = N
panel_audio.ini:isSupportAudioExtraGain = Y
{'amp.ini:AmpBinPath': '/factory/aq/25_50A23_N012301-008650-001/AMP_RT9120.bin', 'panel_audio.ini:cSupportCareSoundMode': 'N', 'panel_audio.ini:isSupportAudioExtraGain': 'Y'}

aq/25_50A23_N012301-008650-001
['aq/25_50A23_N012301-008650-001/amp.ini', 'aq/25_50A23_N012301-008650-001/panel_audio.ini']
amp.ini:AmpBinPath = /factory/aq/25_50A23_N012301-008650-001/AMP_RT9120.bin
panel_audio.ini:cSupportCareSoundMode = N
panel_audio.ini:isSupportAudioExtraGain = Y
{}

isdkz 发表于 2023-4-7 10:35:08

你好!从你提供的代码和输出结果来看,似乎在某些情况下,aq_data_dict 字典为空。

这可能是由于在某些情况下,if filename in filename_list: 这个条件没有满足,导致没有找到正确的文件名。

你可以在代码中添加一些打印语句来调试,看看为什么在某些情况下这个条件没有被满足。例如:

    for filename_key in filename_key_list:
      filename, key = filename_key
      if filename in filename_list:
            # ...
      else:
            print(f"{filename} not found in filename_list")

这样你可以看到哪些文件名没有在 filename_list 中找到。这可能是由于在构造 filename_list 时出现了问题。

另外,你也可以尝试打印 filename_list 和 filename_key_list,以便更好地理解它们的结构。

print("filename_list:", filename_list)
print("filename_key_list:", filename_key_list)

希望这些建议对你有所帮助!如果问题依然存在,请随时提问。

liyuping-fisher 发表于 2023-4-7 11:00:13

isdkz 发表于 2023-4-7 10:35
你好!从你提供的代码和输出结果来看,似乎在某些情况下,aq_data_dict 字典为空。

这可能是由于在某些 ...

两个结果打印出来一样的额,除了正常输出的外,其他一毛一样
正常:
aq/25_50A23_N012301-008650-001
['aq/25_50A23_N012301-008650-001/amp.ini', 'aq/25_50A23_N012301-008650-001/panel_audio.ini']
amp.ini:AmpBinPath = /factory/atv/panel/7T862_A23/aq/25_50A23_N012301-008650-001/AMP_RT9120.bin;
lyp1-filename_list: ['amp.ini', 'panel_audio.ini']
lyp2-filename_key_list: [('amp.ini', 'AmpBinPath'), ('panel_audio.ini', 'cSupportCareSoundMode'), ('panel_audio.ini', 'isSupportAudioExtraGain')]
lyp3-filename amp.ini
lyp4-key AmpBinPath
panel_audio.ini:cSupportCareSoundMode = N;
lyp1-filename_list: ['amp.ini', 'panel_audio.ini']
lyp2-filename_key_list: [('amp.ini', 'AmpBinPath'), ('panel_audio.ini', 'cSupportCareSoundMode'), ('panel_audio.ini', 'isSupportAudioExtraGain')]
lyp3-filename panel_audio.ini
lyp4-key cSupportCareSoundMode
panel_audio.ini:isSupportAudioExtraGain = Y;
lyp1-filename_list: ['amp.ini', 'panel_audio.ini']
lyp2-filename_key_list: [('amp.ini', 'AmpBinPath'), ('panel_audio.ini', 'cSupportCareSoundMode'), ('panel_audio.ini', 'isSupportAudioExtraGain')]
lyp3-filename panel_audio.ini
lyp4-key isSupportAudioExtraGain
{'amp.ini:AmpBinPath': '/factory/atv/panel/7T862_A23/aq/25_50A23_N012301-008650-001/AMP_RT9120.bin;', 'panel_audio.ini:cSupportCareSoundMode': 'N;', 'panel_audio.ini:isSupportAudioExtraGain': 'Y;'}
异常:
aq/25_50A23_N012301-008650-001
['aq/25_50A23_N012301-008650-001/panel_audio.ini', 'aq/25_50A23_N012301-008650-001/amp.ini']
lyp1-filename_list: ['amp.ini', 'panel_audio.ini']
lyp2-filename_key_list: [('amp.ini', 'AmpBinPath'), ('panel_audio.ini', 'cSupportCareSoundMode'), ('panel_audio.ini', 'isSupportAudioExtraGain')]
lyp3-filename amp.ini
lyp4-key AmpBinPath
lyp1-filename_list: ['amp.ini', 'panel_audio.ini']
lyp2-filename_key_list: [('amp.ini', 'AmpBinPath'), ('panel_audio.ini', 'cSupportCareSoundMode'), ('panel_audio.ini', 'isSupportAudioExtraGain')]
lyp3-filename panel_audio.ini
lyp4-key cSupportCareSoundMode
lyp1-filename_list: ['amp.ini', 'panel_audio.ini']
lyp2-filename_key_list: [('amp.ini', 'AmpBinPath'), ('panel_audio.ini', 'cSupportCareSoundMode'), ('panel_audio.ini', 'isSupportAudioExtraGain')]
lyp3-filename panel_audio.ini
lyp4-key isSupportAudioExtraGain
{}

liyuping-fisher 发表于 2023-4-7 16:31:50

       aq_data_dict = {}
      # 遍历文件名和key对应列表
      for filename_key in filename_key_list:
            # 获取文件名和key
            filename, key = filename_key
            # 判断文件名是否在文件名列表中
            if filename in filename_list:
                # 获取文件在文件列表中的索引
                index = filename_list.index(filename)
                #print("lyp5-index",index)
                # 打开文件并查找key对应的值
                # 遍历所有文件,查找是否包含对应的key
                for i in range(len(file_list)):
                  filename = os.path.basename(file_list)
                  if filename in filename_list:
                        with open(file_list, 'r', encoding='utf-8') as f:
                            for line in f:
                              line = line.strip()
                              for key in key_list:
                                    if line.startswith(key):
                                        value = line.split('=').split(';').strip()
                                        aq_data_dict = value
                                        break
页: [1]
查看完整版本: 萌新又来求助了,代码执行后结果不稳定,我要的是第一种,但是是不是会第二种字典w...