iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python如何读取配置文件ConfigParser的二次封装
  • 811
分享到

Python如何读取配置文件ConfigParser的二次封装

2023-06-29 03:06:44 811人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

今天小编给大家分享一下python如何读取配置文件ConfigParser的二次封装的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一

今天小编给大家分享一下python如何读取配置文件ConfigParser的二次封装的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

Python读取配置文件-ConfigParser二次封装

直接上上代码

test.conf

[database]connect = mysqlsleep = notest = yes

config.py

# -*- coding:utf-8 -*-__author__ = 'guoqianqian'import osimport ConfigParserimport oscurrent_dir = os.path.abspath(os.path.dirname(__file__))class OperationalError(Exception):    """operation error."""class Dictionary(dict):    """ custom dict."""    def __getattr__(self, key):        return self.get(key, None)    __setattr__ = dict.__setitem__    __delattr__ = dict.__delitem__class Config:    def __init__(self, file_name="test", cfg=None):        """        @param file_name: file name without extension.        @param cfg: configuration file path.        """        env = {}        for key, value in os.environ.items():            if key.startswith("TEST_"):                env[key] = value        config = ConfigParser.ConfigParser(env)        if cfg:            config.read(cfg)        else:            config.read(os.path.join(current_dir, "conf", "%s.conf" % file_name))        for section in config.sections():            setattr(self, section, Dictionary())            for name, raw_value in config.items(section):                try:                    # Ugly fix to avoid '0' and '1' to be parsed as a                    # boolean value.                    # We raise an exception to Goto fail^w parse it                    # as integer.                    if config.get(section, name) in ["0", "1"]:                        raise ValueError                    value = config.getboolean(section, name)                except ValueError:                    try:                        value = config.getint(section, name)                    except ValueError:                        value = config.get(section, name)                setattr(getattr(self, section), name, value)    def get(self, section):        """Get option.        @param section: section to fetch.        @return: option value.        """        try:            return getattr(self, section)        except AttributeError as e:            raise OperationalError("Option %s is not found in "                                         "configuration, error: %s" %                                         (section, e))if __name__ == "__main__":    conf = Config()    print conf.get("database").connect    print conf.get("database").sleep    print conf.get("database").test

执行结果

Mysql
False
True

目录结构

demo    conf        test.conf    config.py

读取配置文件&&简单封装

之前有做过把爬虫数据写到数据库中的练习,这次想把数据库信息抽离到一个ini配置文件中,这样做的好处在于可以在配置文件中添加多个数据库,方便切换(另外配置文件也可以添加诸如邮箱、url等信息)

1.configparser模块

python使用自带的configparser模块用来读取配置文件,配置文件的形式类似windows中的ini文件

在使用前需要先安装该模块,使用pip安装即可

2.configparser读取文件的基本方法

(1)新建一个config.ini文件,如下

Python如何读取配置文件ConfigParser的二次封装

(2)新建一个readconfig.py文件,读取配置文件的信息

import configparsercf = configparser.ConfigParser()cf.read("E:\Crawler\config.ini")  # 读取配置文件,如果写文件的绝对路径,就可以不用os模块secs = cf.sections()  # 获取文件中所有的section(一个配置文件中可以有多个配置,如数据库相关的配置,邮箱相关的配置,                        每个section由[]包裹,即[section]),并以列表的形式返回print(secs)options = cf.options("mysql-Database")  # 获取某个section名为Mysql-Database所对应的键print(options)items = cf.items("Mysql-Database")  # 获取section名为Mysql-Database所对应的全部键值对print(items)host = cf.get("Mysql-Database", "host")  # 获取[Mysql-Database]中host对应的值print(host)

上述代码运行结果如下,可以和config.ini进行对比

Python如何读取配置文件ConfigParser的二次封装

3.引入os模块,使用相对目录读取配置文件

工程目录如下:

Python如何读取配置文件ConfigParser的二次封装

readconfig.py:

import configparserimport osroot_dir = os.path.dirname(os.path.abspath('.'))  # 获取当前文件所在目录的上一级目录,即项目所在目录E:\Crawlercf = configparser.ConfigParser()cf.read(root_dir+"/config.ini")  # 拼接得到config.ini文件的路径,直接使用secs = cf.sections()  # 获取文件中所有的section(一个配置文件中可以有多个配置,如数据库相关的配置,邮箱相关的配置,每个section由[]包裹,即[section]),并以列表的形式返回print(secs)options = cf.options("Mysql-Database")  # 获取某个section名为Mysql-Database所对应的键print(options)items = cf.items("Mysql-Database")  # 获取section名为Mysql-Database所对应的全部键值对print(items)host = cf.get("Mysql-Database", "host")  # 获取[Mysql-Database]中host对应的值print(host)

或者使用os.path.join()进行拼接

import configparserimport osroot_dir = os.path.dirname(os.path.abspath('.'))  # 获取当前文件所在目录的上一级目录,即项目所在目录E:\Crawlerconfigpath = os.path.join(root_dir, "config.ini")cf = configparser.ConfigParser()cf.read(configpath)  # 读取配置文件secs = cf.sections()  # 获取文件中所有的section(一个配置文件中可以有多个配置,如数据库相关的配置,邮箱相关的配置,每个section由[]包裹,即[section]),并以列表的形式返回print(secs)options = cf.options("Mysql-Database")  # 获取某个section名为Mysql-Database所对应的键print(options)items = cf.items("Mysql-Database")  # 获取section名为Mysql-Database所对应的全部键值对print(items)host = cf.get("Mysql-Database", "host")  # 获取[Mysql-Database]中host对应的值print(host)

4.通过读取配置文件

重新写一下之前的requests+正则表达式爬取猫眼电影的例子

把读取配置文件readconfig.py和操作数据库handleDB.py分别封装到一个类中

readconfig.py如下

import configparserimport osclass ReadConfig:    """定义一个读取配置文件的类"""    def __init__(self, filepath=None):        if filepath:            configpath = filepath        else:            root_dir = os.path.dirname(os.path.abspath('.'))            configpath = os.path.join(root_dir, "config.ini")        self.cf = configparser.ConfigParser()        self.cf.read(configpath)    def get_db(self, param):        value = self.cf.get("Mysql-Database", param)        return valueif __name__ == '__main__':    test = ReadConfig()    t = test.get_db("host")    print(t)

handleDB.py如下

# coding: utf-8# author: hmkfrom common.readconfig import ReadConfigimport pymysql.cursorsclass HandleMysql:    def __init__(self):        self.data = ReadConfig()    def conn_mysql(self):        """连接数据库"""        host = self.data.get_db("host")        user = self.data.get_db("user")        passWord = self.data.get_db("password")        db = self.data.get_db("db")        charset = self.data.get_db("charset")        self.conn = pymysql.connect(host=host, user=user, password=password, db=db, charset=charset)        self.cur = self.conn.cursor()    def execute_sql(self, sql, data):        """执行操作数据的相关sql"""        self.conn_mysql()        self.cur.execute(sql, data)        self.conn.commit()    def search(self, sql):        """执行查询sql"""        self.conn_mysql()        self.cur.execute(sql)        return self.cur.fetchall()    def close_mysql(self):        """关闭数据库连接"""        self.cur.close()        self.conn.close()if __name__ == '__main__':    test = HandleMysql()    sql = "select * from maoyan_movie"    for i in test.search(sql):        print(i)

最后的运行文件,调用前面的方法

# coding: utf-8# author: hmkimport requestsimport refrom common import handleDBclass Crawler:    """定义一个爬虫类"""    def __init__(self):        self.db = handleDB.HandleMysql()    @staticmethod    def get_html(url, header):        response = requests.get(url=url, headers=header)        if response.status_code == 200:            return response.text        else:            return None    @staticmethod    def get_data(html, list_data):        pattern = re.compile(r'<dd>.*?<i.*?>(\d+)</i>.*?'  # 匹配电影排名                             r'<p class="name"><a.*?data-val=".*?">(.*?)'  # 匹配电影名称                             r'</a>.*?<p.*?class="releasetime">(.*?)</p>'  # 匹配上映时间                             r'.*?<i.*?"integer">(.*?)</i>'  # 匹配分数的整数位                             r'.*?<i.*?"fraction">(.*?)</i>.*?</dd>', re.S)  # 匹配分数小数位        m = pattern.findall(html)        for i in m:  # 因为匹配到的所有结果会以列表形式返回,每部电影信息以元组形式保存,所以可以迭代处理每组电影信息            ranking = i[0]  # 提取一组电影信息中的排名            movie = i[1]  # 提取一组电影信息中的名称            release_time = i[2]  # 提取一组电影信息中的上映时间            score = i[3] + i[4]  # 提取一组电影信息中的分数,这里把分数的整数部分和小数部分拼在一起            list_data.append([ranking, movie, release_time, score])  # 每提取一组电影信息就放到一个列表中,同时追加到一个大列表里,这样最后得到的大列表就包含所有电影信息    def write_data(self, sql, data):        self.db.conn_mysql()        try:            self.db.execute_sql(sql, data)            print('导入成功')        except:            print('导入失败')        self.db.close_mysql()    def run_main(self):        start_url = 'Http://maoyan.com/board/4'        depth = 10  # 爬取深度(翻页)        header = {"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/WEBp,*/*;q=0.8",                  "Accept-Encoding": "gzip, deflate, sdch",                  "Accept-Language": "zh-CN,zh;q=0.8",                  "Cache-Control": "max-age=0",                  "Connection": "keep-alive",                  "Host": "maoyan.com",                  "Referer": "http://maoyan.com/board",                  "Upgrade-Insecure-Requests": "1",                  "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36"}        for i in range(depth):            url = start_url + '?offset=' + str(10 * i)            html = self.get_html(url, header)            list_data = []            self.get_data(html, list_data)            for i in list_data:                """这里的list_data参数是指正则匹配并处理后的列表数据(是一个大列表,包含所有电影信息,每个电影信息都存在各自的一个列表中;                对大列表进行迭代,提取每组电影信息,这样提取到的每组电影信息都是一个小列表,然后就可以把每组电影信息写入数据库了)"""                movie = i  # 每组电影信息,这里可以看做是准备插入数据库的每组电影数据                sql = "insert into maoyan_movie(ranking,movie,release_time,score) values(%s, %s, %s, %s)"  # sql插入语句                self.write_data(sql, movie)if __name__ == '__main__':    test = Crawler()    test.run_main()

以上就是“Python如何读取配置文件ConfigParser的二次封装”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网Python频道。

--结束END--

本文标题: Python如何读取配置文件ConfigParser的二次封装

本文链接: https://www.lsjlt.com/news/322371.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python如何读取配置文件ConfigParser的二次封装
    今天小编给大家分享一下Python如何读取配置文件ConfigParser的二次封装的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一...
    99+
    2023-06-29
  • Python读取配置文件-ConfigParser的二次封装方法
    目录Python读取配置文件-ConfigParser二次封装直接上上代码读取配置文件&&简单封装1.configparser模块2.configparser读取文件...
    99+
    2024-04-02
  • python如何读取ini配置文件
    Python提供了一个标准库`configparser`用于读取和修改INI文件。首先,需要导入`configparser`模块:`...
    99+
    2023-10-08
    python
  • Python读取配置文件
    文章目录 Python读取配置文件一、 yaml1、 准备2、 操作数据2.1 读取数据2.2 写入数据 二、 ini1、准备2、 操作数据2.1 读取数据2.2. 写数据 ...
    99+
    2023-09-03
    python 开发语言
  • python读取yaml配置文件
    1.yaml [ˈjæməl]: Yet Another Markup Language :另一种标记语言。yaml 是专门用来写配置文件的语言,非常简洁和强大,之前用ini也能写配置文件,看了yaml后,发现这个更直观,更方便,有点类似...
    99+
    2023-01-31
    配置文件 python yaml
  • 如何读取Flex配置文件
    这篇文章主要介绍了如何读取Flex配置文件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Flex在运行时如何读取Flex配置文件Flex简介AdobeFlex是为满足希望开发...
    99+
    2023-06-17
  • thinkphp5如何读取配置文件
    本篇内容介绍了“thinkphp5如何读取配置文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在使用ThinkPHP5框架时,我们通常需要...
    99+
    2023-07-05
  • java如何读取配置文件
    Java中可以使用java.util.Properties类来读取配置文件。Properties类提供了一些方法来读取和操作属性文件...
    99+
    2023-08-08
    java
  • 5.7:Python如何读取二进制文件?
    随着信息技术的不断发展,二进制数据已经成为了现代计算机应用中不可或缺的一部分。在许多情况下,我们需要读取和处理二进制数据,这些数据可能包括图像、音频、视频、压缩文件等。Python作为一种流行的编程语言,提供了多种方法和库,可以帮助我们读取...
    99+
    2023-09-01
    java linux 开发语言
  • Python怎么读取配置文件
    这篇文章主要讲解了“Python怎么读取配置文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python怎么读取配置文件”吧!一、 yaml1、 准备支持的数据类型:字典、列表、字符串、布...
    99+
    2023-07-05
  • C#中如何读取配置文件
    C#中如何读取配置文件,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。C#读取配置文件1、读取配置信息下面是一个配置文件的具体内容:   &nb...
    99+
    2023-06-18
  • .NetCore中如何读取配置文件
    小编给大家分享一下.NetCore中如何读取配置文件,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!在应用程序开发中,配置文件是主要存储系统的初始配置信息,配置文件的读取虽然属于基础内容却又经常用到,所以百丈高楼平地起,学习...
    99+
    2023-06-29
  • SpringBoot yml配置文件如何读取
    本篇内容主要讲解“SpringBoot yml配置文件如何读取”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot yml配置文件如何读取”吧!yaml介绍YA...
    99+
    2023-07-04
  • bootstrap.yml如何读取nacos配置中心的配置文件
    目录bootstrap.yml读取nacos配置中心配置文件依赖的版本交由父模块进行版本控制了(另附上依赖代码)父模块的依赖管理总结bootstrap.yml读取nacos配置中心配...
    99+
    2022-12-28
    bootstrap.yml nacos配置中心 nacos配置文件
  • Vue如何二次封装axios为插件使用
    这篇文章给大家分享的是有关Vue如何二次封装axios为插件使用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。vuejs2.0 已经不再维护 vue-resource,vuejs...
    99+
    2024-04-02
  • vue如何实现axios的二次封装
    这篇文章主要介绍“vue如何实现axios的二次封装”,在日常操作中,相信很多人在vue如何实现axios的二次封装问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue如何实现axios的二次封装”的疑惑有所...
    99+
    2023-07-04
  • 如何使用@PropertySource读取配置文件
    本篇内容主要讲解“如何使用@PropertySource读取配置文件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用@PropertySource读取配置文件”吧!@PropertySou...
    99+
    2023-06-29
  • 通过python读取ini配置文件
    ini是啥你可以理解为就是一个配置文件的统称吧。比如test.conf,这样的你可以理解为他就是ini文件,里面一般存放一些配置信息。比如数据库的基本信息,一会我们进行讲解!那么ta的好处是啥呢?就是把一些配置信息提出去来进行单独管理,如果...
    99+
    2023-01-31
    配置文件 python ini
  • python学习之读取配置文件
    前言: 最近在接触利用python来写测试框架,本人也是个刚接触python,所以是个小菜鸟,今天开始,一点点的记录学习中的积累,方便以后的学习以及回顾,也希望能帮助跟我一样的小菜鸟...
    99+
    2024-04-02
  • SpringBoot如何读取外部配置文件
    这篇文章将为大家详细讲解有关SpringBoot如何读取外部配置文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.SpringBoot配置文件SpringBoot使用一个以application命名的...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作