[ TOC]
説明:yaml構成ファイルがxml構成ファイルおよびjson構成ファイルと共通しているのは、理解と使用が簡単であり、構成ファイルがより簡潔で理解しやすいということです。
公式サイトリンク:[https://pypi.org/project/ruamel.yaml/](https://pypi.org/project/ruamel.yaml/)
#! /usr/bin/env python
# - *- coding: utf-8-*-
# @ File : YamlDemo.py
# @ CreateTime :2019/7/2411:07
# @ Author : WeiyiGeek
# @ Function :Yaml言語分析
# @ Software: PyCharm
# pip install ruamel.yaml
import sys
import ruamel.yaml
def main():
#(1) Yaml構成ファイル情報を読む
yaml = ruamel.yaml.YAML()withopen('demo.yaml','r',encoding='utf-8')as conf:try:
config = yaml.load(conf)
except ruamel.yaml.YAMLError as e:print("解析エラー:",e)
#(2) yaml構成ファイル情報を一定のスケールで印刷します
for i in config:print(i," : ", config[i])
# オブジェクト
for i in config['obj']:print(i, config['obj'][i])
# アレイ
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) アーカイブに書き込む
withopen("update.yml",'w+',encoding='utf-8')as con:
ruamel.yaml.dump(config, con, allow_unicode=True, Dumper=ruamel.yaml.RoundTripDumper) #さらに、ダンパーが元々どのようなスタイルであったか
ruamel.yaml.dump(config, sys.stdout, Dumper=ruamel.yaml.RoundTripDumper) #変更後の端末への出力
if __name__ =='__main__':main()
動作結果:
# 結果を印刷する
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モジュールを使用して、バックアップディレクトリがソースディレクトリファイルと一致しているかどうかを確認し、ソースディレクトリファイルをターゲットディレクトリに同期します。
#! /usr/bin/env python
# - *- coding: utf-8-*-
# @ File : verity.py
# @ CreateTime :2019/7/2614: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)
# ランバ式を使用して、変数が発生するファイルパスを書き込みます
[ 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ファイル(再帰的な比較を続ける)iflen(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
iflen(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
# 変数は差分ファイルを返します(パスを置き換えた後、パスを宛先配列に戻し、次の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()
WeiyiGeek.filecmpファイルディレクトリの検証
Recommended Posts