liyuping-fisher 发表于 2023-7-10 14:39:11

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

不想动脑子了{:5_100:}
字典大概是这样的
字典的键值是文件名和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'}

陶远航 发表于 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


请确保您的编辑器环境已正确配置,并具备适当的文件系统访问权限。

isdkz 发表于 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)# 替换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。

liyuping-fisher 发表于 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)# 替换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都变成了小写
页: [1]
查看完整版本: 求助:如何用字典中的value替换ini文件中key所对应的value