我没有 选择 configparser 模块去写入配置文件 选择用的 python 自带 open 写入 configparser自带写入 注释 看着比较难受 不习惯 本次选择 open 写入 根据个人喜好 选择都能实现 写入功能
需求 在程序运行中以外停止 在次启动程序 需要在上次停止位置开始启动
比如 一个程序有三层10-10-10
当程序 在3-4-6 的时候意外程序崩溃 再起启动需要从0-0-0开始
现在需要启动时候在 3-4-6 的时候启动 不是在从0-0-0开始
先看下示例图 第一次运行 第一配置文件 断点续接 1 表示开启
第一次 都是0-0-0位置
运行结果 0-0-0开始
运行结果 都是从0-0-0开始 现在 要他从3-4-6开始
配置文件 更改为 3-4-6
运行结果 成功实现
启动文件
'''
断点续接 比较娄的一个小方案
需要 建四个文件 Settings1.ini 断点续接开关 Settings.ini 配置文件 Settings.py 配置文件 和 main.py 启动文件
Settings1.ini 断点续接开关 不动的
Settings.ini 放 断点序号 动态 记录 每次执行序号 注意动态 执行的序号要和 静态的配置文件 分开 避免 设置混乱导致程序崩溃
Settings.py 放 程序 一些其他的需要的 库 和函数 需要用的代码
main.py 用于启动程序 和启动程序的逻辑代码
需求 在程序 终止意外断开的 位置 重现启动
for i in range(100): 循环在到20的位置 程序意外 停止 需要在启动 要在 20位置 重现启动
适合单文件 一个大文件 不适合这个方案 ,W 模式下写入文件 会清空 之前写入 单个大文件 需要作进一步 判断
比如 在20的位置 停止 防止 20 写入的错误 跳过 20 , 需要在20的位置 重新写入 20号文件 在往后走
方案 用 ini 配置文件 来完成 用其他的也可以 个人喜欢用 ini 配置文件 根据个人喜好和习惯
'''
# 导入py配置文件 * 代表导出全部包括变量 会有 变量重名 的风险 需要注意
from Settings import *
# # 或者分开导入比较好自行选择 我采用 * 的方式
# from Settings import cfg
def Start_up():
# 记录序号
n = 0
# 初始值 大写 是默认常量 Python 特性没有常量
N = 0
# cfg.get 读出 是字符串 cfg.getint 读取是int数字 py 特性 int判断 是 0 False 1 True 不是空字符 都是 True
if cfg.getint("Switch", "judgment"):
# 读取配置文件信息
N = cfg.getint("judgment", "n")
print(f"n是{N}开始")
for i in range(10):
if n >= N:
print(i)
# 记录序号
x = 0
# 初始值 大写 是默认常量 Python 特性没有常量
X = 0
if cfg.getint("Switch", "judgment"):
X = cfg.getint("judgment", "x")
print(f"x是{X}开始")
for j in range(10):
if x >= X:
print(j)
# 记录序号
y = 0
# 初始值 大写 是默认常量 Python 特性没有常量
Y = 0
if cfg.getint("Switch", "judgment"):
Y = cfg.getint("judgment", "y")
print(f"y是{Y}开始")
for k in range(10):
if k >= Y:
print(k)
# 写入 序号
Write(n, x, y)
y += 1
# 完成y值 = 0
Write(n, x, 0)
x += 1
# 完成x值 = 0
Write(n, 0, 0)
n += 1
完成n值 = 0
Write(0, 0, 0)
if __name__ == '__main__':
Start_up()
配置 py 文件
import os
from configparser import ConfigParser
# 写入文件函数
def write(path, data):
with open(path, mode="w", encoding="utf-8") as f:
f.write(data)
# 初始化 判断有没有 ini 配置文件 防止没有 配置文件 程序无法运行
def init():
data = '''[judgment]
; 首次判断序号
n = 0
; 二次判断序号
x = 0
; 第三次判断序号
y = 0
'''
if not os.path.exists("Settings.ini"):
write("Settings.ini", data)
data1 = '''[Switch]
; 注意 table [judgment] 区分大小写 table下面 不区分大写小 大写 读取后也是小写 需要注意 坑
; 是否 启动 断点续接 开关 利用Python 的特性 0代表False 除0以外代True 本次就用 1来代表True
judgment = 1
'''
if not os.path.exists("Settings1.ini"):
write("Settings1.ini", data1)
# 初始化 ini配置文件
init()
# 读取 Settings.ini 配置信息
cfg = ConfigParser()
cfg.read('Settings.ini', encoding="utf-8")
cfg.read('Settings1.ini', encoding="utf-8")
def Write(n, x, y):
data = f'''[judgment]
; 首次判断序号
n = {n}
; 二次判断序号
x = {x}
; 第三次判断序号
y = {y}
'''
# 和上面N,X,Y 变量一起做适配
if cfg.getint("Switch", "judgment"):
write("Settings.ini", data)
ini 配置文件 动态
[judgment]
; 首次判断序号
n = 0
; 二次判断序号
x = 0
; 第三次判断序号
y = 0
ini 静态配置文件 断点续接 开关
[Switch]
; 注意 table [judgment] 区分大小写 table下面 不区分大写小 大写 读取后也是小写 需要注意 坑
; 是否 启动 断点续接 开关 利用Python 的特性 0代表False 除0以外代True 本次就用 1来代表True
judgment = 1