鱼C论坛

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

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

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

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

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

x
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([self.factoryroot_dir,self.model_type,'/aq',self.panel_info])
        #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([tup[0] for tup in self.pickle_info]))
        self.aq_path_list = [f'{self.aq_path}/{af}' for af in self.aq_file_list]
        return self.aq_path_list
    def get_aq_data(self):
        #对于给定的元组列表,可以使用列表推导式遍历每个元组,并取出其中指定位置的元素
        keys = [key[1] for key in self.pickle_info]
        #取出元素后,可以对列表去重并排序,以方便后续操作。可以使用 set() 函数将列表转换为集合,并使用 sorted() 函数对集合中的元素进行排序
        search_keys = sorted(set(keys))
        #获取文件名
        names = [file[0] for file in self.pickle_info]
        search_files = sorted(set([name for name in names if name.strip()]))
        # 文件列表
        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[index],'r',encoding='utf-8') as f:
                    for line in f:
                        line = line.strip()#去掉行末的换行符
                        # 如果该行以key开头,则以等号分隔,取第二个部分作为key对应的值
                        if line.startswith(key):
                            value = line.split('=')[1].split(';')[0].strip()
                            print(f"{filename}:{key} = {value}")
                            #将key和value存储到字典
                            aq_data_dict[filename + ":" + key] = 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
{}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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)

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

点评

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

使用道具 举报

 楼主| 发表于 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
{}
想知道小甲鱼最近在做啥?请访问 -> 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 23:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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