鱼C论坛

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

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

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

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

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

x
不想动脑子了
字典大概是这样的
字典的键值是文件名和ini文件的key组成的,如何将字典的value替换成ini中key对应的value,字典的键值由ini文件名冒号ini中key对应的名字组成,如何在字典和路径已知的情况下替换字典中文件所在ini的key的值
  1. {'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'}
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

请将代码中的/path/to/your/inifile.ini替换为您实际的INI文件路径。此代码将读取指定的INI文件,然后根据字典中的键值对替换相应键的值,并将修改后的内容写回到INI文件中。

注意:在使用ConfigParser库之前,请确保已将其正确安装。您可以使用以下命令来安装ConfigParser库:
  1. pip install configparser
复制代码

请确保您的编辑器环境已正确配置,并具备适当的文件系统访问权限。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

  1. import configparser
  2. import os

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

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

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

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

  25.     # 将修改后的配置写回文件
  26.     with open(file_name, 'w') as configfile:
  27.         config.write(configfile)
复制代码


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

请注意,这个脚本假设每个ini文件的key都是唯一的,也就是说同一个key只会出现在一个section中。如果同一个key可能出现在多个section中,这个脚本可能会只替换第一个出现的key的值。如果你需要替换所有出现的key的值,你可以删除 break 这一行,让脚本在所有的section中查找key。
小甲鱼最新课程 -> https://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 文件的配置信 ...

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

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


不但替换的key变成小写了,ini文件的所有key都变成了小写
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-22 17:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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