[TOC]
配置文件
yaml 配置
描述:yaml配置文件与xml配置文件以及json配置文件的共同之处是在于方便理解与使用,是配置文件更加的简洁通俗易懂;
[TOC]
描述:yaml配置文件与xml配置文件以及json配置文件的共同之处是在于方便理解与使用,是配置文件更加的简洁通俗易懂;
官网链接: https://pypi.org/project/ruamel.yaml/
[TOC]
描述:yaml配置文件与xml配置文件以及json配置文件的共同之处是在于方便理解与使用,是配置文件更加的简洁通俗易懂;
官网链接: https://pypi.org/project/ruamel.yaml/1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File : YamlDemo.py
# @CreateTime : 2019/7/24 11:07
# @Author : WeiyiGeek
# @Function : Yaml语言解析
# @Software: PyCharm
# pip install ruamel.yaml
import sys
import ruamel.yaml
def main():
#(1)读取Yaml配置文件信息
yaml = ruamel.yaml.YAML()
with open('demo.yaml','r',encoding='utf-8') as conf:
try:
config = yaml.load(conf)
except ruamel.yaml.YAMLError as e:
print("解析错误:",e)
#(2)打印出yaml的配置文件信息 常量scales
for i in config:
print(i, " : ", config[i])
#对象Object
for i in config['obj']:
print(i, config['obj'][i])
#数组Array
print(config['array'][0]['key1'], config['array'][1]['key2'], config['array'][2]['key3'])
#(3)修改与添加
config['NAME'] = "WeiyiGeek"
config['add'] = "WeiyiGeek"
config['obj']['age'] = "888"
config['obj']['love'][1] = "烹饪"
#(4)写入存档
with open("update.yml",'w+',encoding='utf-8') as con:
ruamel.yaml.dump(config, con, allow_unicode=True, Dumper=ruamel.yaml.RoundTripDumper) #加上Dumper原来是什么样式就是什么样式
ruamel.yaml.dump(config, sys.stdout, Dumper=ruamel.yaml.RoundTripDumper) #修改后输出到终端
if __name__ == '__main__':
main()
运行结果:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32#打印结果
PI : 3.1415926
NAME : “This is a String”
INT : 1024
obj : ordereddict([('name', 'WeiyiGeeK'), ('age', 18), ('love', ['Computer', 'Cook', 'car'])])
array : [ordereddict([('key1', 'I')]), ordereddict([('key2', 'Love')]), ordereddict([('key3', 'Study')])]
name WeiyiGeeK
age 18
love ['Computer', 'Cook', 'car']
I Love Stud
#yaml写入文件结果
#常量
PI: 3.1415926
NAME: WeiyiGeek
INT: 1024
#对象(集合)
obj:
name: WeiyiGeeK
age: '888'
love: !!obj
- Computer
- "\u70F9\u996A"
- car
#数组
array:
- key1: I
- key2: Love
- key3: Study
add: WeiyiGeek
参考
描述:采用filecmp模块对进行确认备份目录与源目录文件是否保持一致,并且同步源目录文件到目标目录之中:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File : verity.py
# @CreateTime : 2019/7/26 14:23
# @Author : WeiyiGeek
# @Function : 同步校验源文件/目标文件
# @Software: PyCharm
import os,sys
import filecmp
import shutil
holderlist = []
destination = []
def compareme(src, dest):
dircomp = filecmp.dircmp(src, dest);
onlyfile = dircomp.left_only #源文件新目录或者文件
difffile = dircomp.diff_files #源目录中发生变化的文件(不匹配的文件)
dirpath = os.path.abspath(src)
#将发生变量的文件路径写入到,采用lamba表达式
[holderlist.append(os.path.abspath(os.path.join(src, x))) for x in onlyfile] #将源文件中创建的文件绝对路径存入数组中
[holderlist.append(os.path.abspath(os.path.join(src, x))) for x in difffile] #将源文件中的发生改变的文件/目录绝对路径存入数组中
#src / desc 两边都存在的文件(继续递归对比)
if len(dircomp.common_dirs):
for item in dircomp.common_dirs:
compareme(os.path.abspath(os.path.join(src, item)), os.path.abspath(os.path.join(dest, item)))
return holderlist
def main():
global destination,\
holderlist
if len (sys.argv) > 2:
src = sys.argv[1]
dest = sys.argv[2]
else:
print("""
Usage: verity.py srcDirectory destDirectory
""")
sys.exit(1)
source_files = compareme(src, dest) #比较源目录与备份
dir1 = os.path.abspath(src)
dir2 = os.path.abspath(dest)
createdir = False
#变量返回差异性文件 (替换路径后重新放入destination数组中为后面的zip做准备)
for item in source_files:
#获取源文件中的目录
destination_dir = item.replace(dir1,dir2)
destination.append(destination_dir)
#创建目录(再目录不存在的情况下)
if os.path.isdir(item):
if not os.path.exists(destination_dir):
os.makedirs(destination_dir)
createdir = True
#如果创建目录,重新遍历新创建的目录
if createdir:
destination = [] #防止重复
srcfile = compareme(dir1,dir2)
holderlist = srcfile
for item in srcfile:
destination.append(item.replace(dir1,dir2))
[ print(x) for x in destination]
print("update item")
copy_pair = zip(source_files, destination) #源/备份目录文件清单拆分成元组
for item in copy_pair: #判断文件复制操作
if os.path.isfile(item[0]):
shutil.copyfile(item[0],item[1])
print(item)
if __name__ == '__main__':
main()
你好看友,欢迎关注博主微信公众号哟! ❤
这将是我持续更新文章的动力源泉,谢谢支持!(๑′ᴗ‵๑)
温馨提示: 未解锁的用户不能粘贴复制文章内容哟!
方式1.请访问本博主的B站【WeiyiGeek】首页关注UP主,
将自动随机获取解锁验证码。
Method 2.Please visit 【My Twitter】. There is an article verification code in the homepage.
方式3.扫一扫下方二维码,关注本站官方公众号
回复:验证码
将获取解锁(有效期7天)本站所有技术文章哟!
@WeiyiGeek - 为了能到远方,脚下的每一步都不能少
欢迎各位志同道合的朋友一起学习交流,如文章有误请在下方留下您宝贵的经验知识,个人邮箱地址【master#weiyigeek.top】
或者个人公众号【WeiyiGeek】
联系我。
更多文章来源于【WeiyiGeek Blog - 为了能到远方,脚下的每一步都不能少】, 个人首页地址( https://weiyigeek.top )
专栏书写不易,如果您觉得这个专栏还不错的,请给这篇专栏 【点个赞、投个币、收个藏、关个注、转个发、赞个助】,这将对我的肯定,我将持续整理发布更多优质原创文章!。
最后更新时间:
文章原始路径:_posts/系统运维/自动化运维/Python/Python自动化运维2.md
转载注明出处,原文地址:https://blog.weiyigeek.top/2019/7-9-274.html
本站文章内容遵循 知识共享 署名 - 非商业性 - 相同方式共享 4.0 国际协议