Pythonの自動操作とメンテナンス2

[ TOC]

構成ファイル####

yaml構成#####

説明:yaml構成ファイルがxml構成ファイルおよびjson構成ファイルと共通しているのは、理解と使用が簡単であり、構成ファイルがより簡潔で理解しやすいということです。

ruamel.yamlモジュール######

公式サイトリンク:[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

参照

ini構成#####

ファイルのバックアップ####

説明: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

Pythonの自動操作とメンテナンス2
Pythonの自動操作とメンテナンス1
Pythonファイル操作
Python and Go
python操作kafka
Pythonファイルとディレクトリの操作コードの概要
Pythonの自動化された操作と保守のLinuxの概要、および仮想マシンのインストールと使用に関する究極のガイド
Pythonの内省と考察
[python] ubuntuの下のpython2とpython3
Python操作SQLiteデータベース
Python操作yaml命令
Pythonの分解とパッケージ化
Python3の構成とentry.md
Pythonの紹介と環境のインストール
Python操作Excelマージセル
Pythonはクローラーとアンチクローラーを知っています
centos7はpython3とipythonをインストールします
Pythonの負の弾性率の操作例
ubuntu18.04python3.8をコンパイルしてインストールします
Centos6.10はpythonとyumを再インストールします
Pythonオープン読み取りおよび書き込み
CentOS7はpython3とpip3をインストールします
Pythonのデータ構造とアルゴリズム
Pythonマルチプロセスおよびマルチスレッドの基本
CentOS6.9はpythonをコンパイルしてインストールします
クイックスタートPythonファイル操作
CentOS6はpython3をコンパイルしてインストールします
Pythonのジェネレーターとイテレーター
Pythonファイルの読み取りおよび書き込み操作
Pythonとjsのインタラクティブな呼び出しメソッド
魔法の方法とPythonの使用
Pythonは正と負の数を判断します
pythonftpアップロードファイルとフォルダー
Pythonクローラー|コグニティブクローラーのリクエストとレスポンス
word2vec操作のPython予備実装
FMアルゴリズム分析とPython実装
pythonの一般的なエラーと解決策
CentOS7のインストールとGitlabのメンテナンス
Pythonは文字列と数値のスプライシングを実装します
Pythonリスト理解操作例の概要
Pythonファイル操作の基本的なプロセス分析
Python関数の定義とパラメーターの説明
pythonselenium操作cookieの実装
CentOSはPython3とpip3をすばやくインストールします
pythonクローラーのMongodbとpythonの相互作用
Python3をインストールし、CentOS8でansible
PDFおよびCDFの例を処理するPython
株で遊んでPythonを学んだ
centos7でpython3環境を構成し、
python操作redisのいくつかの例
Pythonはjsonファイルを読み書きします
pythonアクセスAlipayの操作例
Pythonはユーザー名とパスワードの検証を実装しています
CentOS7の下にPython3とPyをインストールします
python accesshdfsの操作
Pythonは実行する操作コードを処理します
Pythonの基本的な構文と数値タイプ
Python学習OSモジュールと使用法