目录结构

bin:存放程序入口,程序启动文件。

conf:存放配置文件,配置文件主要是一些全局变量,路径信息等。

core:程序核心文件,不涉及到业务逻辑。

app:存放和系统业务相关的逻辑。

db:存放系统运行所需的数据文件。

lib:存放公共组件。

log:存放日志文件。

README:软件说明文档。

README:

1、软件名称,软件的基本功能,应用范围。

2、软件运行环境,安装方法,启动方式等。

3、软件简要的使用说明(常用操作)。

4、代码目录结构说明,详细介绍各模块的功能及组织关系。

5、用于用户提交BUG,建议的邮箱。

configparser 配置文件

configparser文件由section组成,每个section下有自己独立的内容。

1、创建配置文件,并写入内容。

import configparser
conf = configparser.ConfigParser() # 创建一个配置文件对象
conf["DEFAULT"] = { # 将内容写入conf对象中
"IP":"127.0.0.1",
"NETMASK":"255.255.255.0",
"PORT:":""
}
conf["USER"] = { # 将内容写入conf对象中
"IP":"192.168.1.1",
"NETMASK":"255.255.255.0",
"GATEWAY":"192.168.1.255",
"PORT":""
}
file_write = open("service.ini",mode="a")
conf.write(file_write) # 将对象中的内容写入文件
file_write.close()

内容如下:

configparse:对象类似于字典,可以向字典一样操作对象。

2、读取配置文件:

import configparser
conf = configparser.ConfigParser() # 创建一个配置文件对象
conf.read("service.ini") # 一定要先读出来,然后才能操作
print(conf["DEFAULT"]["IP"],
conf["DEFAULT"]["NETMASK"],
conf["DEFAULT"]["PORT"])
print(conf["USER"]["IP"],
conf["USER"]["NETMASK"],
conf["USER"]["PORT"]) # 打印内容如下
127.0.0.1 255.255.255.0 = 8080
192.168.1.1 255.255.255.0 8088

3、使用for循环打印配置文件。

import configparser
conf = configparser.ConfigParser() # 创建一个配置文件对象
conf.read("service.ini") # 一定要先读出来,然后才能操作 for k in conf: # 通过循环打印配置文件所有内容
print(k,conf.items(k)) # 打印内容如下
DEFAULT [('ip', '127.0.0.1'), ('netmask', '255.255.255.0'), ('port', '= 8080')]
USER [('ip', '192.168.1.1'), ('netmask', '255.255.255.0'), ('port', ''), ('gateway', '192.168.1.255')]

4、修改配置文件。

修改配置文件后,一定要重新将数据写入文件,因为此时的数据是在内存当中,并没有写入文件,所以下次打开文件时,文件内容并没有被修改。如下操作:

import configparser
conf = configparser.ConfigParser() # 创建一个配置文件对象
conf.read("service.ini") # 一定要先读出来,然后才能操作
conf["DEFAULT"]["IP"] = "192.168.1.110" # 修改DEFAULT节下IP的内容
conf.write(open("service.ini",mode="w"))# 修改内容后一定要重新写入文件
print(conf["DEFAULT"]["IP"]) # 打印内容如下
192.168.1.110

查看文件是否被修改:

5、删除配置文件内容:默认配置文件DEFAULT是不允许删除的。

import configparser
conf = configparser.ConfigParser() # 创建一个配置文件对象
conf.read("service.ini") # 一定要先读出来,然后才能操作
conf.pop("USER") # 删除section
conf.write(open("service.ini",mode="w"))# 删除后一定要重新写入文件

删除后的内容如下:USER字节被删除。

random模块

randrange(start, stop[, step]):这个函数可以理解是从range(start, stop[, step])范围内随机返回一个数。

randint(a, b):随机返回一个整数围在a <= N <= b

random.choice(seq):从一个非空的序列中,随机返回一个元素。

random.choices(seq,k):从一个非空的序列中,随机返回k个元素的列表。

random.shuffle(x[, random]):对可迭代对象随机排序,前提是可跌对象必须是可以被更改的,如列表,集合等不能是字符串或者是元组等不可变数据类型。

random.sample(population, k):population参数是一个序列,或者是一个集合,参数k是要返回元素的数目,返回类型列表。

random.random():返回一个0.0-1.0内的随机小数。

random.uniform(a,b):随机返回一个a和b之间的小数。


下一篇:面向对象一:https://www.cnblogs.com/caesar-id/p/10498347.html

python开发规范和(configparser、random模块)的更多相关文章

  1. Python开发规范

    背景 Python语言规范 Lint 导入 包 异常 全局变量 嵌套/局部/内部类或函数 列表推导(List Comprehensions) 默认迭代器和操作符 生成器 Lambda 函数 条件表达式 ...

  2. 万恶之源 - Python开发规范

    开发规范 什么是开发规范?为什么要有开发规范呢? 你现在包括之前写的一些程序,所谓的'项目',都是在一个py文件下完成的,代码量撑死也就几百行,你认为没问题,挺好.但是真正的后端开发的项目,系统等,少 ...

  3. python学习笔记(七)- 递归、python内置函数、random模块

    1.函数的不固定参数: #参数不是必填的.没有限制参数的个数.返回参数组的元组 def syz(*args): #参数组,不限制参数个数 #‘args’参数的名字可以随便命名 print(args) ...

  4. python(30)——【random模块】【if __name__ =='__main__'】【os模块】

    一.random模块(随机模块) 1.random 常用模块介绍 import random print(random.random()) #返回[0,1)之间的随机浮点数 print(random. ...

  5. python标准库介绍——27 random 模块详解

    ==random 模块== "Anyone who considers arithmetical methods of producing random digits is, of cour ...

  6. (转)Python开发规范

    转自:https://www.jianshu.com/p/d414e90dc953 Python风格规范 本项目包含了部分Google风格规范和PEP8规范,仅用作内部培训学习 Python风格规范 ...

  7. S1.2 Python开发规范指南

    参考链接 Python风格规范 分号 不要在行尾加分号, 也不要用分号将两条命令放在同一行. 行长度 每行不超过80个字符 例外: 长的导入模块语句 注释里的URL 不要使用反斜杠连接行. Pytho ...

  8. 18 python 初学(time、random 模块)

    # _author: lily # _date: 2019/1/13 import time import datetime print(help(time)) # print(time.time() ...

  9. Day13 Python基础之time/datetime/random模块一(十一)

    time模块 import time print(help(time)) time.time() #return current time in seconds since the Epoch as ...

随机推荐

  1. c# 关于页面生命周期

    每次遇到这个问题,总是含含糊糊的说不清楚,今天就在这里统一整理一下,以便以后的查看. 一般来说,页要经历下表概述的各个阶段.除了页生命周期阶段以外,在请求前后还存在应用程序阶段,但是这些阶段并不特定于 ...

  2. Redis基本使用及百亿数据量中的使用技巧分享(附视频地址及观看指南)

    作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9941208.html 主讲人:大石头 时间:2018-11-10 晚上20:00 地点:钉钉群(组织代码 ...

  3. 死磕 java集合之TreeMap源码分析(四)-内含彩蛋

    欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. 二叉树的遍历 我们知道二叉查找树的遍历有前序遍历.中序遍历.后序遍历. (1)前序遍历,先遍历 ...

  4. 说一说MVC的CompressActionFilterAttrubute(五)

    通过action对文件流压缩,提高带宽速度!!! 引用using System.IO.Compression; public override void OnActionExecuting(Actio ...

  5. docker-compose部署mysql无法访问

    docker-compose部署mysql无法访问 这个问题困扰了我很久,当使用docker-compose部署mysql之后,进行容器后,使用mysql -u root -p 是可以访问的,而使用s ...

  6. Kafka Producer源码简述

    接着上文kafka的简述,这一章我们一探kafka生产者是如何发送消息到消息服务器的. 代码的入口还是从 kafkaTemplate.send开始 最终我们就会到 org.springframewor ...

  7. 图像处理基础(2):自适应中值滤波器(基于OpenCV实现)

    本文主要介绍了自适应的中值滤波器,并基于OpenCV实现了该滤波器,并且将自适应的中值滤波器和常规的中值滤波器对不同概率的椒盐噪声的过滤效果进行了对比.最后,对中值滤波器的优缺点了进行了总结. 空间滤 ...

  8. [十七]JavaIO之CharArrayReader 和 CharArrayWriter

    功能简介 CharArrayReader  和 CharArrayWriter, 字符数组作为数据源的字符读写  CharArrayReader  CharArrayWriter  只需要记住他们的根 ...

  9. SpringCloud系列——Zuul 动态路由

    前言 Zuul 是在Spring Cloud Netflix平台上提供动态路由,监控,弹性,安全等边缘服务的框架,是Netflix基于jvm的路由器和服务器端负载均衡器,相当于是设备和 Netflix ...

  10. C#组件系列——又一款日志组件:Elmah的学习和分享

    前言:好久没动笔了,都有点生疏,12月都要接近尾声,可是这月连一篇的产出都没有,不能坏了“规矩”,今天还是来写一篇.最近个把月确实很忙,不过每天早上还是会抽空来园子里逛逛.一如既往,园子里每年这个时候 ...