python配置文件的两种方式

文章目录

前言

在运行项目程序时通常会有一个配置文件,配置文件是用于配置程序的参数和初始化设置的文件。

比如现在要做一个项目,在部署程序时,需要摄像头IP地址、数据库地址、数据库名称,这些都可以作为配置项写入配置文件。当程序实地部署时,只需要修改配置文件,不需要去代码当中到处查找修改。

本文以下配置内容以配置多个摄像头为例。

py文件作为配置文件

新建一个 config.py文件,将程序运行所需的摄像头参数写入一个类中。


class Config:
    cam1_ulr = "rtsp://admin:admin111@192.168.1.100:554/main"
    cam2_ulr = "rtsp://admin:admin111@192.168.1.101:554/main"

测试代码:


import cv2
from multiprocessing import Process
import time
from config import Config

def video_show(url):
    capture = cv2.VideoCapture(url)
    while True:
        ref, frame = capture.read()
        if ref is False:
            print("视频读取失败:{}".format(url))
            time.sleep(0.5)
            capture = cv2.VideoCapture(url)
            print("视频重连成功")
            continue
        cv2.namedWindow("demo", 0)
        cv2.imshow("demo", frame)
        cv2.waitKey(1)

def main():
    cam1_ulr = Config.cam1_ulr
    cam2_ulr = Config.cam2_ulr
    p = Process(target=video_show, args=(cam1_ulr,))
    p.start()
    p = Process(target=video_show, args=(cam2_ulr,))
    p.start()

if __name__ == '__main__':
    main()

yaml文件作为配置文件

首先需要安装相应的包

pip install pyyaml

yaml支持的数据结构有3种:

  • 对象:键值对的集合,又称映射(mapping)/哈希(hashes)/字典(dictionary)
  • 数组:一组按次序排列的值,又称序列(sequence)/列表(list)
  • 纯量(scalars):单个的,不可再分的值

对象:对象的一组键值,使用冒号表示(注意:编写的时候最好冒号前后各空一个空格)

animal : dog

类似于python中的字典

{animal : "dog"}

数组:一组连词线构成的行,组成一组数组

- animal
- vegetables
- meet
- people

类似于python中的列表

["animal","vegetables","meet","people"]

复合结构:对象和数组可以结合使用,形成复合结构

language:
    - Python
    - Java
    - PHP
websites:
    Python : python.org
    Java : java.com
    YAML : yaml.org

转换为python形式:

{language:["Python","Java","PHP"],websites:{"Python":"python.org","Java":"java.com","YAML":"yaml.org"}}

新建一个 config.yaml文件,将程序运行所需的摄像头参数写入一个类中。

cam_config:
  -
    url: rtsp://admin:admin111@192.168.1.100:554/main
  -
    url: rtsp://admin:admin111@192.168.1.101:554/main

测试代码:


import cv2
import yaml
from multiprocessing import Process
import time

def video_show(url):
    capture = cv2.VideoCapture(url)
    while True:
        ref, frame = capture.read()
        if ref is False:
            print("视频读取失败:{}".format(url))
            time.sleep(0.5)
            capture = cv2.VideoCapture(url)
            print("视频重连成功")
            continue
        cv2.namedWindow("demo",0)
        cv2.imshow("demo", frame)
        cv2.waitKey(1)

def main():
    file = open('test.yaml', 'r', encoding="utf-8")

    datas = yaml.load(file, Loader=yaml.FullLoader)

    print(datas)
    cam_data = datas["cam_config"]
    print(cam_data)
    print(len(cam_data))
    for i in range(len(cam_data)):
        url = cam_data[i]["url"]
        p = Process(target=video_show, args=(url,))
        p.start()

if __name__ == '__main__':
    main()

效果展示:
同时起多个摄像头

python配置文件的两种方式

总结

目前就先记录下py文件与yaml文件作为配置文件的过程,py文件是最简单的配置方式,但是缺少相应的层级关系;yaml大小写敏感、使用缩进表示层级关系, #表示注释。
它们之间各有优劣,可以根据自己实际的需求和团队协作要求来具体选择。笔者个人建议优先yaml文件作为配置文件的方式。
参考文档:
https://blog.csdn.net/qq_44614026/article/details/120028490
如果阅读本文对你有用,欢迎一键三连呀!!!
2022年7月12日10:11:38

python配置文件的两种方式

Original: https://blog.csdn.net/JulyLi2019/article/details/125680856
Author: JulyLi2019
Title: python配置文件的两种方式

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/702936/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球