鱼C论坛

 找回密码
 立即注册
查看: 2601|回复: 2

[已解决]python3.11怎么获取ini文件的块状数据

[复制链接]
发表于 2023-5-5 11:08:38 | 显示全部楼层 |阅读模式

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

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

x
比如ini文件如下
  1. [Country_Lang]
  2. m_pCountry_Lang_File = "/vendor/tvconfig/apollo/countrylang.ini";

  3. [Misc]
  4. #MISC section define that the INI is not only one module use.
  5. m_pCustomizationFunc_File = "/vendor/tvconfig/apollo/CustomizationFunc.ini";
  6. m_pCustomization3RDFunc_File = "/vendor/tvconfig/apollo/Customization3RDFunc.ini";

  7. [acfg]
  8. #Auto Sleep
  9. m_pSleepTimeCfg_File = "/vendor/tvconfig/apollo/sleeptime_cfg.ini";
  10. m_pADV_SOUND_SYSTEM_File = "/vendor/tvconfig/apollo/ADV_SOUND_SYSTEM.ini";
  11. m_pConfigDefaultValue_File = "/vendor/tvconfig/apollo/ConfigDefaultValue.ini";
  12. m_pSpecialCountryScanDef_File ="/vendor/tvconfig/apollo/SpecialCountryScanDef.ini";
  13. m_pColTemEx_File = "/vendor/tvconfig/apollo/ColTemEx.ini";

  14. [HDMI]
  15. m_pHdmiMap_File = "/vendor/tvconfig/apollo/hdmi_map.ini";

  16. [Boot]
  17. m_pboot_cfg_File = "/vendor/tvconfig/apollo/boot_cfg.ini";
复制代码


如何通过已知的[acfg]  [HDMI]等获取他们下面的一整块数据,并且整块数据做处理只显示等号前面的ky和等号和分号之间的value值,并将块头[HDMI]写入excel的前一行,后一行写处理后的一整块数据,比如如下在excel显示
最佳答案
2023-5-5 11:26:25
要实现这个功能,你可以使用Python的 configparser 库来解析INI文件,然后处理并将数据写入Excel文件。以下是一个示例代码:

  1. import configparser
  2. import os
  3. import openpyxl

  4. # 解析INI文件
  5. config = configparser.ConfigParser()
  6. config.read('example.ini')

  7. # 创建Excel工作簿
  8. workbook = openpyxl.Workbook()
  9. sheet = workbook.active

  10. # 遍历INI文件的sections
  11. row = 1
  12. for section in config.sections():
  13.     # 只处理已知的sections
  14.     if section in ['acfg', 'HDMI']:
  15.         # 将section名写入Excel的前一行
  16.         sheet.cell(row=row, column=1, value=section)
  17.         row += 1

  18.         # 遍历当前section的键值对
  19.         for key, value in config.items(section):
  20.             # 只显示等号前面的key和等号和分号之间的value值
  21.             key = key.split('=')[0].strip()
  22.             value = value.split(';')[0].strip()

  23.             # 将处理后的数据写入Excel
  24.             sheet.cell(row=row, column=1, value=f"{key} = {value}")
  25.             row += 1

  26. # 保存Excel文件
  27. workbook.save('output.xlsx')
复制代码


上述代码会解析给定的INI文件,提取已知section(如 [acfg] 和 [HDMI] )及其下面的键值对。然后,它将section名写入Excel的前一行,处理后的键值对写入后一行。最后,将结果保存到名为 output.xlsx 的Excel文件中。
微信图片_20230505110818.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-5-5 11:26:25 | 显示全部楼层    本楼为最佳答案   
要实现这个功能,你可以使用Python的 configparser 库来解析INI文件,然后处理并将数据写入Excel文件。以下是一个示例代码:

  1. import configparser
  2. import os
  3. import openpyxl

  4. # 解析INI文件
  5. config = configparser.ConfigParser()
  6. config.read('example.ini')

  7. # 创建Excel工作簿
  8. workbook = openpyxl.Workbook()
  9. sheet = workbook.active

  10. # 遍历INI文件的sections
  11. row = 1
  12. for section in config.sections():
  13.     # 只处理已知的sections
  14.     if section in ['acfg', 'HDMI']:
  15.         # 将section名写入Excel的前一行
  16.         sheet.cell(row=row, column=1, value=section)
  17.         row += 1

  18.         # 遍历当前section的键值对
  19.         for key, value in config.items(section):
  20.             # 只显示等号前面的key和等号和分号之间的value值
  21.             key = key.split('=')[0].strip()
  22.             value = value.split(';')[0].strip()

  23.             # 将处理后的数据写入Excel
  24.             sheet.cell(row=row, column=1, value=f"{key} = {value}")
  25.             row += 1

  26. # 保存Excel文件
  27. workbook.save('output.xlsx')
复制代码


上述代码会解析给定的INI文件,提取已知section(如 [acfg] 和 [HDMI] )及其下面的键值对。然后,它将section名写入Excel的前一行,处理后的键值对写入后一行。最后,将结果保存到名为 output.xlsx 的Excel文件中。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-5 11:52:31 | 显示全部楼层
isdkz 发表于 2023-5-5 11:26
要实现这个功能,你可以使用Python的 configparser 库来解析INI文件,然后处理并将数据写入Excel文件。以下 ...

感谢提供思路,经过您的思路和我查的信息,我用的是如下的信息,谢谢~
  1. import os
  2. import openpyxl
  3. from openpyxl.worksheet.datavalidation import DataValidation

  4. # 解析INI文件
  5. config = configparser.ConfigParser()
  6. config.read('ini文件')

  7. # 创建Excel工作簿
  8. workbook = openpyxl.Workbook()
  9. sheet = workbook.active

  10. # 遍历INI文件的sections
  11. row = 1
  12. for section in config.sections():
  13.     # 只处理已知的sections
  14.     if section in ['acfg', 'HDMI']:
  15.         # 将section名写入Excel的前一行
  16.         sheet.cell(row=row, column=1, value=section)

  17.         # 遍历当前section的键值对,只处理第一个键值对
  18.         kv_dict = dict(config.items(section))
  19.         first_kv = list(kv_dict.items())[0]

  20.         # 在第一个空单元格添加数据验证
  21.         validation_row = row
  22.         while sheet.cell(row=validation_row, column=2).value is not None:
  23.             validation_row += 1
  24.         if validation_row > row:
  25.             validation = DataValidation(type='list', formula1='"True,False"', allow_blank=True)
  26.             sheet.add_data_validation(validation)
  27.             validation.add(f'B{validation_row}')

  28.         # 将处理后的数据写入Excel,包括section名称和第一个键值对
  29.         sheet.cell(row=validation_row, column=2, value=f"{section}.{first_kv[0]} = {first_kv[1]}")

  30.         # 遍历当前section的其余键值对,将其添加到单元格中
  31.         for key, value in kv_dict.items():
  32.             # 跳过第一个键值对,因为已经处理过了
  33.             if key == first_kv[0]:
  34.                 continue
  35.             sheet.cell(row=row, column=2).value += f"\n{section}.{key} = {value}"

  36.         # 设置单元格换行
  37.         sheet.cell(row=row, column=2).alignment = openpyxl.styles.Alignment(wrap_text=True)

  38.         # 计算行数,以便写入下一个section的数据
  39.         row = validation_row + 1

  40. # 保存Excel文件
  41. workbook.save('output.xlsx')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 00:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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