跳至主要内容

python 之 configparser、configobj(ini配置文件)

ini 即 Initialize 初始化之意,通常由节(Section)、键(key)和值(value)组成

ini修改工具




语法
    INIFILE filename.ini [section] item=string



  1. # db.ini 中的内容
  2. # *********************
  3. # [localdb]
  4. # host     = 127.0.0.1
  5. # user     = root
  6. # password = 123456
  7. # port     = 3306
  8. # database = mysql
  9. # *********************
  10.  
  11. import pymysql
  12. from configparser import ConfigParser
  13.  
  14. cfg = ConfigParser()
  15. cfg.read("db.ini")
  16.  
  17. print(cfg.items("localdb"))
  18. db_cfg = dict(cfg.items("localdb"))
  19. print(db_cfg)
  20.  
  21. # 端口port类型str转为int
  22. db_cfg['port'] = int(db_cfg['port'])
  23. con = pymysql.connect(**db_cfg)
  24.  

  1. from pprint import pprint
  2. lst = [line.strip() for line in open('db.ini')]
  3. pprint(lst)




        Python带有一个名为ConfigParser的便捷模块。这对于创建和读取配置文件(即INI文件)非常有用。但是,Michael Foord(《 IronPython in Action》的作者)和Nicola Larosa决定编写自己的配置模块ConfigObj。在许多方面,它是对标准库模块的改进。例如,当它读取配置文件时,它将返回类似于字典的对象。ConfigObj也可以理解某些Python类型。另一个简洁的功能是,您可以创建一个配置规范,ConfigObj将使用该规范来验证配置文件。

ConfigParser
用户和程序员都使用配置文件。它们通常用于存储应用程序的设置,甚至存储操作系统的设置。Python的核心库包括一个名为configparser的模块

configparser 默认将值以字符串的形式呈现,所以这也就是为什么我们在 db.ini 文件中没有加引号而是直接将字面量写在上面的原因


  1. import configparser
  2. import os
  3.  
  4. def create_config(path):
  5.     """
  6.    Create a config file
  7.    """
  8.     config = configparser.ConfigParser()
  9.     config.add_section("Settings")
  10.     config.set("Settings", "font", "Courier")
  11.     config.set("Settings", "font_size", "10")
  12.     config.set("Settings", "font_style", "Normal")
  13.     config.set("Settings", "font_info",
  14.                "You are using %(font)s at %(font_size)s pt")
  15.  
  16.     with open(path, "w") as config_file:
  17.         config.write(config_file)
  18.  
  19.  
  20. def get_config(path):
  21.     """
  22.    Returns the config object
  23.    """
  24.     if not os.path.exists(path):
  25.         create_config(path)
  26.  
  27.     config = configparser.ConfigParser()
  28.     config.read(path)
  29.     return config
  30.  
  31.  
  32. def get_setting(path, section, setting):
  33.     """
  34.    Print out a setting
  35.    """
  36.     config = get_config(path)
  37.     value = config.get(section, setting)
  38.     msg = "{section} {setting} is {value}".format(
  39.         section=section, setting=setting, value=value)
  40.     print(msg)
  41.     return value
  42.  
  43.  
  44. def update_setting(path, section, setting, value):
  45.     """
  46.    Update a setting
  47.    """
  48.     config = get_config(path)
  49.     config.set(section, setting, value)
  50.     with open(path, "w") as config_file:
  51.         config.write(config_file)
  52.  
  53.  
  54. def delete_setting(path, section, setting):
  55.     """
  56.    Delete a setting
  57.    """
  58.     config = get_config(path)
  59.     config.remove_option(section, setting)
  60.     with open(path, "w") as config_file:
  61.         config.write(config_file)
  62.  
  63.  
  64.  
  65. if __name__ == "__main__":
  66.     path = "settings.ini"
  67.     font = get_setting(path, 'Settings', 'font')
  68.     font_size = get_setting(path, 'Settings', 'font_size')
  69.  
  70.     update_setting(path, "Settings", "font_size", "12")
  71.  
  72.     delete_setting(path, "Settings", "font_style")
  73.  


批量读取ini文件并转存到excel中

  1. from configobj import ConfigObj
  2. import csv
  3. import glob
  4. import pandas as pd
  5.  
  6.  
  7. with open('data.csv', 'w', newline='', encoding='utf_8_sig') as csvfile:
  8.     list_X=['Name', 'Tax', 'Mac', 'ServerIP', 'DbPath', 'IcCard',
  9.             'Code', 'Brand', 'Area', 'contactName1', 'post1', 'mobile1',
  10.             'phone1', 'email1', 'contactName2', 'post2', 'mobile2',
  11.             'phone2', 'email2', 'KEY', 'DiskNum', 'DiskPwd', 'CertPwd']
  12.     writer = csv.writer(csvfile)
  13.     writer.writerow(list_X)
  14.     for conf_ini in glob.glob(r"D:\日常工作记录\20200601\*.ini"):
  15.         config = ConfigObj(conf_ini, encoding='ANSI', raise_errors=True, list_values=False)
  16. #         print(config.filename)
  17. #         print(dir(config))
  18. #         print(config.dict())
  19.         list_V=[]
  20.         for i in list_X:          
  21.             list_V.append(config['CompanyInfo'][i])
  22.         writer.writerow(list_V)
  23.  
  24.  
  25. pd.read_csv('data.csv').to_excel('data.xlsx', index=False)




ConfigObj
http://python101.pythonlibrary.org/chapter30_configobj.html

https://configobj.readthedocs.io/en/latest/index.html

pip install configobj


  1. import configobj
  2.  
  3. def createConfig(path):
  4.     config = configobj.ConfigObj()
  5.     config.filename = path
  6.     config["Sony"] = {}
  7.     config["Sony"]["product"] = "Sony PS3"
  8.     config["Sony"]["accessories"] = ['controller', 'eye', 'memory stick']
  9.     config["Sony"]["retail price"] = "$400"
  10.     config.write()
  11.  
  12. if __name__ == "__main__":
  13.     createConfig("config.ini")
  14.  
  15.  
  16. >>> from configobj import ConfigObj
  17. >>> config = ConfigObj(r"path to config.ini")
  18. >>> config.filename
  19. 'config.ini'
  20. >>> config.dict()
  21. {'Sony': {'product': 'Sony PS3', 'accessories': ['controller', 'eye', 'memory stick'], 'retail price': '$400'}}
  22. >>> config.dict()["Sony"]["product"]
  23. 'Sony PS3'
  24. >>> config.dict()["Sony"]["accessories"]
  25. ['controller', 'eye', 'memory stick']
  26. >>> type(config.dict()["Sony"]["accessories"])
  27. <type 'list'>
  28.  

评论

此博客中的热门博文

Mongo 入门

https://pymongo.readthedocs.io/en/stable/tutorial.html https://www.mongodb.com/languages/python https://zhuanlan.zhihu.com/p/51171906 https://www.runoob.com/python3/python-mongodb.html https://blog.baoshuo.ren/post/luogu-spider/ https://hub.docker.com/_/mongo 安装 MongoDB $ docker search mongo 启动一个mongo服务器实例 $ docker run --name some-mongo -d mongo:tag some-mongo是您要分配给容器的名称,tag是指定您想要的 MongoDB 版本的标签 MongoDB 的默认数据目录路径是/data/db 如下: $ docker run -it -v mongodata:/data/db -p 27017:27017 --name mongodb --restart unless-stopped -d mongo 你应该让 MongoDB 在端口 27017 上运行,并且可以通过localhostWindows 和 Ubuntu 20.04 上的URL访问 http://localhost:27017/ -p 是 HOST_PORT:CLIENT_PORT  -P 随机端口 -p 27017:27017 :将容器的27017 端口映射到主机的27017 端口 -v mongodata:/data/db :将主机中当前目录下的db挂载到容器的/data/db,作为mongo数据存储目录 从另一个 Docker 容器连接到 MongoDB 镜像中的 MongoDB 服务器侦听标准 MongoDB 端口27017,因此通过 Docker 网络连接将与连接到远程mongod. 以下示例启动另一个 MongoDB 容器实例,并mongo针对上述示例中的原始 MongoDB 容器运行命令行客户端,从而允许您针对数据库实例执行 MongoDB 语句: $ docker run -it --network some-network --...

MechanicalSoup

用于自动与网站交互的 Python 库。 MechanicalSoup 自动存储和发送 cookie,跟踪重定向,并且可以跟踪链接和提交表单。 它不执行 JavaScript。 https://github.com/MechanicalSoup/MechanicalSoup https://mechanicalsoup.readthedocs.io/en/stable/index.html https://realpython.com/python-web-scraping-practical-introduction/ pip show Mechanicalsoup 找到模块的安装位置 https://stackoverflow.com/questions/54352162/download-file-with-mechanicalsoup # Install dependencies # pip install requests # pip install BeautifulSoup4 # pip install MechanicalSoup # Import libraries import mechanicalsoup import urllib.request import requests from bs4 import BeautifulSoup import re # Create a browser object that can collect cookies browser = mechanicalsoup.StatefulBrowser() browser.open("https://www.ons.gov.uk/economy/grossdomesticproductgdp/timeseries/l2kq/qna") browser.download_link(link_text=".xls",file="D:/ONS_Data.xls" )

端口映射 公网访问内网

https://portforward.com/ Holer 通过安全隧道将位于NAT和防火墙之后的本地服务器暴露给公共Internet。 Holer是一个将原型中的应用映射到公网访问的端口映射软件,支持转发基于TCP协议的报文 https://github.com/wisdom-projects/holer 方式一:使用(公告)的holer映射或者开通holer服务,通过holer客户端软件经 holer服务器实现公网访问。 公开的holer映射详情如下: 访问密钥 访问域名 公网地址 本地地址 使用场景 HOLER_CLIENT-2F8D8B78B3C2A0AE holer65530.wdom.net holer.org:65530 127.0.0.1:8080 网页 HOLER_CLIENT-3C07CDFD1BF99BF2 holer65531.wdom.net holer.org:65531 127.0.0.1:8088 网页 HOLER_CLIENT-2A623FCB6E2A7D1D holer65532.wdom.net holer.org:65532 127.0.0.1:80 网页 HOLER_CLIENT-AF3E6391525F70E4 不适用 holer.org:65533 127.0.0.1:3389 远程桌面 HOLER_CLIENT-822404317F9D8ADD 不适用 holer.org:65534 127.0.0.1:22 SSH协议 HOLER_CLIENT-27DD1389DF1D4DBC 不适用 holer.org:65535 127.0.0.1:3306 数据库 使用Java版本的holer客户端 ①java 1.7或者更高版本 ②下载holer-client.zip 修改配置文件C:\holer-client\conf\holer.conf HOLER_ACCESS_KEY=HOLER_CLIENT-2A623FCB6E2A7D1D HOLER_SERVER_HOST=holer65532.wdom.net ③建议先双击运行C:\holer-client\bin\shutdown.bat,再双击运行C:\holer-client\bin\startup.bat...