鱼C论坛

 找回密码
 立即注册
查看: 1923|回复: 4

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

[复制链接]
发表于 2023-4-7 10:11:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. class AQ_INFO():
  2.     def __init__(self):
  3.         #调用EEP_INFO的方法
  4.         EEP_INFO.__init__(self)
  5.         self.factoryroot_dir = self.param_dict.get('FACTORY_PACKAGE')
  6.     def get_aq_path(self):
  7.         #通过关键字符串定位aq路径
  8.         search_strings = []
  9.         search_strings.extend([self.factoryroot_dir,self.model_type,'/aq',self.panel_info])
  10.         #print("确认aq路径需要的字符串", search_strings)
  11.         for dp, dn, filenames in os.walk(self.code_dir):
  12.         #确认aq目录,判断当前目录是否包含了search_strings中的所有字符串
  13.             if all(path in dp or path in filenames for path in search_strings):
  14.                 self.aq_path = dp
  15.                 #print("data:aq路径为:" + aq_path)
  16.                 return self.aq_path
  17.     def get_aq_file(self):
  18.         #通过PARAM_INFO类的pack_data方法获取要处理的aq文件
  19.         files = 'aq_data'
  20.         self.pickle_info = PARAM_INFO.pickle_data(curr_dir,files)
  21.         #print(self.pickle_info)
  22.         #使用列表推导式和集合(set)来拿出元组中的前面一个元素,并去重拼接得到带路径的文件名
  23.         self.aq_file_list = list(set([tup[0] for tup in self.pickle_info]))
  24.         self.aq_path_list = [f'{self.aq_path}/{af}' for af in self.aq_file_list]
  25.         return self.aq_path_list
  26.     def get_aq_data(self):
  27.         #对于给定的元组列表,可以使用列表推导式遍历每个元组,并取出其中指定位置的元素
  28.         keys = [key[1] for key in self.pickle_info]
  29.         #取出元素后,可以对列表去重并排序,以方便后续操作。可以使用 set() 函数将列表转换为集合,并使用 sorted() 函数对集合中的元素进行排序
  30.         search_keys = sorted(set(keys))
  31.         #获取文件名
  32.         names = [file[0] for file in self.pickle_info]
  33.         search_files = sorted(set([name for name in names if name.strip()]))
  34.         # 文件列表
  35.         file_list = self.aq_path_list
  36.         # key列表
  37.         key_list = search_keys
  38.         # 文件名列表
  39.         filename_list = search_files
  40.         # 文件名和key对应列表
  41.         filename_key_list = self.pickle_info
  42.         # 定义一个字典来存储key和对应的value
  43.         aq_data_dict = {}
  44.         # 遍历文件名和key对应列表
  45.         for filename_key in filename_key_list:
  46.             # 获取文件名和key
  47.             filename, key = filename_key
  48.             # 判断文件名是否在文件名列表中
  49.             if filename in filename_list:
  50.                 # 获取文件在文件列表中的索引
  51.                 index = filename_list.index(filename)
  52.                 # 打开文件并查找key对应的值
  53.                 with open(file_list[index],'r',encoding='utf-8') as f:
  54.                     for line in f:
  55.                         line = line.strip()#去掉行末的换行符
  56.                         # 如果该行以key开头,则以等号分隔,取第二个部分作为key对应的值
  57.                         if line.startswith(key):
  58.                             value = line.split('=')[1].split(';')[0].strip()
  59.                             print(f"{filename}:{key} = {value}")
  60.                             #将key和value存储到字典
  61.                             aq_data_dict[filename + ":" + key] = value

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

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

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

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

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

  1.     for filename_key in filename_key_list:
  2.         filename, key = filename_key
  3.         if filename in filename_list:
  4.             # ...
  5.         else:
  6.             print(f"{filename} not found in filename_list")
复制代码


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

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

  1. print("filename_list:", filename_list)
  2. print("filename_key_list:", filename_key_list)
复制代码


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

点评

感谢isdkz每次第一时间回复我,四层我那样改写后可以了,可能是我描述有问题,所有isdkz跟我想的不一样,再次感谢大神  发表于 2023-4-7 16:33
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2023-4-7 11:00:13 | 显示全部楼层
isdkz 发表于 2023-4-7 10:35
你好!从你提供的代码和输出结果来看,似乎在某些情况下,aq_data_dict 字典为空。

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

两个结果打印出来一样的额,除了正常输出的外,其他一毛一样
  1. 正常:
  2. aq/25_50A23_N012301-008650-001
  3. ['aq/25_50A23_N012301-008650-001/amp.ini', 'aq/25_50A23_N012301-008650-001/panel_audio.ini']
  4. amp.ini:AmpBinPath = /factory/atv/panel/7T862_A23/aq/25_50A23_N012301-008650-001/AMP_RT9120.bin;
  5. lyp1-filename_list: ['amp.ini', 'panel_audio.ini']
  6. lyp2-filename_key_list: [('amp.ini', 'AmpBinPath'), ('panel_audio.ini', 'cSupportCareSoundMode'), ('panel_audio.ini', 'isSupportAudioExtraGain')]
  7. lyp3-filename amp.ini
  8. lyp4-key AmpBinPath
  9. panel_audio.ini:cSupportCareSoundMode = N;
  10. lyp1-filename_list: ['amp.ini', 'panel_audio.ini']
  11. lyp2-filename_key_list: [('amp.ini', 'AmpBinPath'), ('panel_audio.ini', 'cSupportCareSoundMode'), ('panel_audio.ini', 'isSupportAudioExtraGain')]
  12. lyp3-filename panel_audio.ini
  13. lyp4-key cSupportCareSoundMode
  14. panel_audio.ini:isSupportAudioExtraGain = Y;
  15. lyp1-filename_list: ['amp.ini', 'panel_audio.ini']
  16. lyp2-filename_key_list: [('amp.ini', 'AmpBinPath'), ('panel_audio.ini', 'cSupportCareSoundMode'), ('panel_audio.ini', 'isSupportAudioExtraGain')]
  17. lyp3-filename panel_audio.ini
  18. lyp4-key isSupportAudioExtraGain
  19. {'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;'}
  20. 异常:
  21. aq/25_50A23_N012301-008650-001
  22. ['aq/25_50A23_N012301-008650-001/panel_audio.ini', 'aq/25_50A23_N012301-008650-001/amp.ini']
  23. lyp1-filename_list: ['amp.ini', 'panel_audio.ini']
  24. lyp2-filename_key_list: [('amp.ini', 'AmpBinPath'), ('panel_audio.ini', 'cSupportCareSoundMode'), ('panel_audio.ini', 'isSupportAudioExtraGain')]
  25. lyp3-filename amp.ini
  26. lyp4-key AmpBinPath
  27. lyp1-filename_list: ['amp.ini', 'panel_audio.ini']
  28. lyp2-filename_key_list: [('amp.ini', 'AmpBinPath'), ('panel_audio.ini', 'cSupportCareSoundMode'), ('panel_audio.ini', 'isSupportAudioExtraGain')]
  29. lyp3-filename panel_audio.ini
  30. lyp4-key cSupportCareSoundMode
  31. lyp1-filename_list: ['amp.ini', 'panel_audio.ini']
  32. lyp2-filename_key_list: [('amp.ini', 'AmpBinPath'), ('panel_audio.ini', 'cSupportCareSoundMode'), ('panel_audio.ini', 'isSupportAudioExtraGain')]
  33. lyp3-filename panel_audio.ini
  34. lyp4-key isSupportAudioExtraGain
  35. {}
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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[i])
                    if filename in filename_list:
                        with open(file_list[i], '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('=')[1].split(';')[0].strip()
                                        aq_data_dict[filename + ':' + key] = value
                                        break
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-24 20:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表