python配置文件的两种方式

2023-05-16

文章目录

  • 前言
  • py文件作为配置文件
  • yaml文件作为配置文件
  • 总结


前言

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

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

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


py文件作为配置文件

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

# -*- coding: utf-8 -*- 
# @Time : 2022/7/11 16:03 
# @Author : JulyLi
# @File : config.py.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"

测试代码:

# -*- coding: utf-8 -*- 
# @Time : 2022/7/11 16:14 
# @Author : JulyLi
# @File : run_cam.py

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

测试代码:

# -*- coding: utf-8 -*- 
# @Time : 2022/5/18 17:47 
# @Author : JulyLi
# @File : run_cam.py

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为load_all()方法返回的迭代器对象
    datas = yaml.load(file, Loader=yaml.FullLoader)
    # for data in datas:
    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()

效果展示:
同时起多个摄像头
在这里插入图片描述


总结

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python配置文件的两种方式 的相关文章

  • 使用 pythonbrew 编译 Python 3.2 和 2.7 时出现问题

    我正在尝试使用构建多个版本的 python蟒蛇酿造 http pypi python org pypi pythonbrew 0 7 3 但我遇到了一些测试失败 这是在运行的虚拟机上 Ubuntu 8 04 32 位 当我使用时会发生这种情
  • Django 代理模型的继承和多态性

    我正在开发一个我没有启动的 Django 项目 我面临着一个问题遗产 我有一个大模型 在示例中简化 称为MyModel这应该代表不同种类的物品 的所有实例对象MyModel应该具有相同的字段 但方法的行为根据项目类型的不同而有很大差异 到目
  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt
  • Spark KMeans 无法处理大数据吗?

    KMeans 有几个参数training http spark apache org docs latest api python pyspark mllib html highlight kmeans pyspark mllib clus
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • AWS EMR Spark Python 日志记录

    我正在 AWS EMR 上运行一个非常简单的 Spark 作业 但似乎无法从我的脚本中获取任何日志输出 我尝试过打印到 stderr from pyspark import SparkContext import sys if name m
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 有没有办法检测正在运行的代码是否正在上下文管理器内执行?

    正如标题所述 有没有办法做到这样的事情 def call back if called inside context print running in context else print called outside context 这将
  • 类型错误:预期单个张量时的张量列表 - 将 const 与 tf.random_normal 一起使用时

    我有以下 TensorFlow 代码 tf constant tf random normal time step batch size 1 1 我正进入 状态TypeError List of Tensors when single Te
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from

随机推荐

  • 树莓派与笔记本用远程桌面连接(Xrdp远程桌面服务)

    树莓派与笔记本用远程桌面连接 xff08 Xrdp远程桌面服务 xff09 输入命令 xff1a sudo apt get install xrdp 用以安装xrdp 安装完成后 xff0c 输入如下命令 xff1a sudo etc in
  • 方面级情感分析论文阅读《A Survey on Aspect-Based Sentiment Analysis: Tasks, Methods, and Challenges》

    文章目录 文章简介基本知识Sentiment or Emotion名词解释 方面级情感分析任务单个任务Aspect Term Extraction ATE Aspect Category Detection ACD Aspect Opini
  • 无法获取unionid时判断是否是同一用户的方法

    思路分享 xff1a 判断是否是历史用户 适用于用户数据迁移 做过微信系产品开发的同学都知道微信有一套账户体系 用户在每个应用都有一个openid xff0c 如果想打通账号体系就必须注册微信开放平台 xff0c 关联公众号或者小程序才能获
  • Rust的所有权

    什么是所有权 所有权是Rust特有的核心概念 xff0c 这个特性让Rust即使没有垃圾回收机制也能够编写出内存安全的程序 因而理解所有权的工作机制对于学习Rust非常重要 与所有权相关的内容还有 xff1a 借用 xff0c 切片和数据的
  • Python 序列之切片(slice)

    本文为Python列表切片功能的学习笔记 xff0c 供您参考 基本用法 Python中支持切片操作的序列类型有列表 xff08 list xff09 元组 xff08 tuple xff09 以及字符串 xff08 str xff09 以
  • Debian 查看与修改IP,设置多ip,network与networkManager配置

    目录 Debian网络配置network Debian网络配置NetworkManager 当前用的是Debian桌面版 xff0c 网络配置network与NetworkManager xff0c 默认网络采用networkManager
  • 树莓派入门(2)树莓派的远程控制

    目录 前言SSHPuTTY远程登录树莓派远程桌面连接VNC与树莓派进行文件传输 前言 在计算机网络中 xff0c 我们可以通过使用C S xff08 客户端 服务器 xff09 模式来实现远程控制 我们如果想用其他电脑来远程控制树莓派 xf
  • “我们“App功能介绍

    系统及开发配置 系统 xff1a Android系统 开发工具 xff1a Android Studio4 0 运行要求 xff1a Android系统5 1及以上 软件介绍 一款娱乐的 xff0c 记录您和爱人纪念日的软件 其中包含经典的
  • Linux/Debian下 root 用户没有声音的解决

    Linux Debian下 root 用户没有声音的解决 问题 xff1a 新装的Debian11 5 下root用户一直没有声音 背景 xff1a Debian11 5 为U盘dvd iso 版本 xff0c root用户下pulse a
  • dmpython win7安装遇到的问题

    系统环境 xff1a win7 python3 6 dm8 20230106 x86 win 64 安装过程及问题 xff1a 打开cmd进入达梦数据库安装目录D soft dm dm8 drivers python dmPython xf
  • python实现队列

    文章目录 队列实现操作实现 队列实现 队列是一种先进先出的数据结构 xff0c 本文用顺序表实现队列 操作 Queue 创建一个空的队列enqueue item 往队列中添加一个item元素dequeue 从队列头部删除一个元素is emp
  • vscode当前工作区不受信任,因此已禁用此扩展

    openGL系列文章目录 文章目录 openGL系列文章目录前言一 解决步骤首先点击左边的 扩展 xff0c 或者使用快捷键 xff1a ctrl 43 shift 43 x2 添加插件信任选择扩展工作区信任 前言 在vscode中安装插件
  • python实现二叉树的创建

    文章目录 二叉树的基本概念二叉树的性质 特性 二叉树的节点表示以及二叉树的创建1 二叉树的节点表示2 二叉树的创建 二叉树的基本概念 二叉树是每个节点最多有两个子树的树结构 通常子树被称作 左子树 xff08 left subtree xf
  • 目标跟踪——SORT算法原理浅析

    目标跟踪文章目录 目标跟踪 SORT算法原理浅析 目标跟踪 Deep Sort算法原理浅析 基于yolov5与Deep Sort的流量统计与轨迹跟踪 文章目录 目标跟踪文章目录SORT算法卡尔曼滤波匈牙利算法 SORT核心算法流程总结 SO
  • 目标跟踪——Deep Sort算法原理浅析

    目标跟踪文章目录 目标跟踪 SORT算法原理浅析 目标跟踪 Deep Sort算法原理浅析 基于yolov5与Deep Sort的流量统计与轨迹跟踪 文章目录 目标跟踪文章目录前言多目标跟踪主要流程Deep Sort总结 前言 背景 xff
  • 基于yolov5与Deep Sort的流量统计与轨迹跟踪

    系列文章目录 目标跟踪 SORT算法原理浅析 目标跟踪 Deep Sort算法原理浅析 基于yolov5与Deep Sort的流量统计与轨迹跟踪 文章目录 系列文章目录前言一 整体目录结构二 Deep Sort代码参数解释三 代码展示总结
  • Ubuntu中docker部署gpu版pytorch

    文章目录 docker简介安装docker与NVIDIA docker安装docke安装NVIDIA docker 安装显卡驱动拉取pytorch GPU版镜像文件运行pytoch容器总结 docker简介 Docker 是一个开源的应用容
  • Ubuntu安装cuda与cudnn,亲测可用

    文章目录 前言一 安装显卡驱动二 安装cuda三 安装cudnn总结 前言 前段时间被派到现场去部署算法 xff0c 之前同事搭好cuda的环境不好用了 xff0c 具体表现为 xff1a 1 屏幕的分辨率显示很奇怪且不可调节 2 输入nv
  • 实现对python源码加密的方法

    文章目录 前言一 将py文件编译成pyc二 将py转化成so文件2 1准备工作2 2新建py2so py文件2 3编译项目文件夹 总结 前言 由于项目的保密性需求 xff0c 对已开发完成的项目需要进行加密处理 xff0c 本文给出两种方法
  • python配置文件的两种方式

    文章目录 前言py文件作为配置文件yaml文件作为配置文件总结 前言 在运行项目程序时通常会有一个配置文件 xff0c 配置文件是用于配置程序的参数和初始化设置的文件 比如现在要做一个项目 xff0c 在部署程序时 xff0c 需要摄像头I