鱼C论坛

 找回密码
 立即注册
查看: 1944|回复: 3

求助:如何用字典中的value替换ini文件中key所对应的value

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

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

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

x
不想动脑子了
字典大概是这样的
字典的键值是文件名和ini文件的key组成的,如何将字典的value替换成ini中key对应的value,字典的键值由ini文件名冒号ini中key对应的名字组成,如何在字典和路径已知的情况下替换字典中文件所在ini的key的值
{'Customer_25.ini:m_pPanelName': '"/factory/atv/panel/7T862_A23/pq/25_50A23_N012301-008650-001/panel.ini"', 'Customer_25.ini:PQBinPathName': '"/factory/atv/panel/7T862_A23/pq/25_50A23_N012301-008650-001/"', 'Customer_25.ini:m_HighFrameRatePanelName': '"/factory/atv/panel/7T862_A23/pq/25_50A23_N012301-008650-001/UD_4K1K120.ini"', 'Customer_25.ini:bSupportPanelDemura': '1'}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-10 14:39:28 | 显示全部楼层
您可以使用Python中的ConfigParser库来读取和修改INI文件。以下是一个示例代码,演示了如何使用字典中的值替换INI文件中对应键的值:
import configparser# 定义字典ini_dict = {    'Customer_25.ini:m_pPanelName': '"/factory/atv/panel/7T862_A23/pq/25_50A23_N012301-008650-001/panel.ini"',    'Customer_25.ini:PQBinPathName': '"/factory/atv/panel/7T862_A23/pq/25_50A23_N012301-008650-001/"',    'Customer_25.ini:m_HighFrameRatePanelName': '"/factory/atv/panel/7T862_A23/pq/25_50A23_N012301-008650-001/UD_4K1K120.ini"',    'Customer_25.ini:bSupportPanelDemura': '1'}# 定义INI文件路径ini_file_path = '/path/to/your/inifile.ini'# 创建 ConfigParser 对象config = configparser.ConfigParser()# 读取 INI 文件config.read(ini_file_path)# 遍历字典,并替换 INI 文件中对应键的值for key, value in ini_dict.items():    section, option = key.split(':')    config.set(section, option, value)# 将修改后的内容写回 INI 文件with open(ini_file_path, 'w') as configfile:    config.write(configfile)
请将代码中的/path/to/your/inifile.ini替换为您实际的INI文件路径。此代码将读取指定的INI文件,然后根据字典中的键值对替换相应键的值,并将修改后的内容写回到INI文件中。

注意:在使用ConfigParser库之前,请确保已将其正确安装。您可以使用以下命令来安装ConfigParser库:
pip install configparser
请确保您的编辑器环境已正确配置,并具备适当的文件系统访问权限。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-10 15:21:20 | 显示全部楼层
你可以使用Python的 configparser 模块来读取和修改 .ini 文件。这个模块可以帮助你读取 .ini 文件的配置信息,修改他们,然后保存。

假设你的字典名是 dict_to_replace ,字典的键名格式为 file.ini:key ,其中 file.ini 是要修改的文件名, key 是需要替换的key。这是一个可以做到这一点的Python脚本:
import configparser
import os

# 字典,包含要修改的文件和key,以及他们对应的新值
dict_to_replace = {
    'Customer_25.ini:m_pPanelName': '"/factory/atv/panel/7T862_A23/pq/25_50A23_N012301-008650-001/panel.ini"', 
    'Customer_25.ini:PQBinPathName': '"/factory/atv/panel/7T862_A23/pq/25_50A23_N012301-008650-001/"', 
    'Customer_25.ini:m_HighFrameRatePanelName': '"/factory/atv/panel/7T862_A23/pq/25_50A23_N012301-008650-001/UD_4K1K120.ini"', 
    'Customer_25.ini:bSupportPanelDemura': '1'
}

# 初始化一个config对象
config = configparser.ConfigParser()

for dict_key in dict_to_replace.keys():
    file_name, ini_key = dict_key.split(':')  # 分割得到文件名和key
    if not os.path.exists(file_name):  # 检查文件是否存在
        print(f"文件 {file_name} 不存在!")
        continue

    # 读取配置文件
    config.read(file_name)
    
    # 找到ini文件中key所在的section
    for section in config.sections():
        if config.has_option(section, ini_key):
            config.set(section, ini_key, dict_to_replace[dict_key])  # 替换value
            break  # 找到了key,退出循环

    # 将修改后的配置写回文件
    with open(file_name, 'w') as configfile:
        config.write(configfile)

在这个脚本中,我们遍历你提供的字典,对于字典中的每一个键值对,我们将字典的键分割成文件名和key,然后打开对应的文件,找到文件中对应的key并用字典的值进行替换,最后我们将修改后的配置信息写回文件。

请注意,这个脚本假设每个ini文件的key都是唯一的,也就是说同一个key只会出现在一个section中。如果同一个key可能出现在多个section中,这个脚本可能会只替换第一个出现的key的值。如果你需要替换所有出现的key的值,你可以删除 break 这一行,让脚本在所有的section中查找key。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-6 16:03:30 | 显示全部楼层
本帖最后由 liyuping-fisher 于 2023-10-6 16:12 编辑
isdkz 发表于 2023-7-10 15:21
你可以使用Python的 configparser 模块来读取和修改 .ini 文件。这个模块可以帮助你读取 .ini 文件的配置信 ...

    def refresh_data(self, model_dict, model_file):
        # 传参分别为派生屏的模块字典和派生屏的路径
        self.target_dict = model_dict 
        self.target_file = model_file
        for filename in self.target_file:  # 遍历文件名列表
            if not os.path.exists(filename):  # 检查文件是否存在
                print(f"文件 {filename} 不存在!")
                continue
        
            # 初始化一个config对象
            config = configparser.ConfigParser()
        
            # 读取配置文件
            config.read(filename)
            
            # 找到ini文件中key所在的section
            for dict_key in self.target_dict.keys():
                file_name, ini_key = dict_key.split(':')  # 分割得到文件名和key
                for section in config.sections():
                    options = config.options(section)
                    for key, value in config.items(section):  # 获取section中的键值对
                        if key.lower() == ini_key.lower():  # 不区分大小写比较key
                            config.set(section, key, self.target_dict[dict_key])  # 替换value
            
            # 将修改后的配置写回文件
            with open(filename, 'w') as configfile:
                config.write(configfile)
                
                
proc_dervie_data.refresh_data(new_factoryroot_data_dict, derive_factoryroot_file)

这样写了后替换的key变成了小写,字典内容是{'sys.ini:MAX_MODEL_INDEX': '43', 'sys.ini:MAX_PROJECT_ID': '43'} 替换后内容成了max_model_index = 43 max_project_id = 43 

不但替换的key变成小写了,ini文件的所有key都变成了小写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-24 10:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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