Python はフォルダー同期を実装します

巴扎黑
リリース: 2016-12-06 14:04:32
オリジナル
1448 人が閲覧しました

2 つのフォルダーの内容を /usr/local/a フォルダーから /usr/local/b フォルダーに同期するために使用される SynDirTool クラスを定義します。 実行メソッド:

Python コード

python SynDirTool.py /usr/local/a  /usr/local/b
ログイン後にコピー

SynDirTool。 py ファイルの内容:

Python コード

#!/usr/bin/python  
# -*- coding:utf-8 -*-  
  
import os  
import shutil  
import sys  
import logging  
class SynDirTool:  
    def __init__(self,fromdir,todir):  
        self.fromdir = fromdir  
        self.todir = todir  
  
    def synDir(self):  
        return self.__copyDir(self.fromdir,self.todir)  
  
    def __copyDir(self,fromdir,todir):  
        #防止该目录不存在,创建目录  
        self.__mkdir(todir)  
        count = 0  
        for filename in os.listdir(fromdir):  
            if filename.startswith('.'):  
                continue  
            fromfile = fromdir + os.sep + filename  
            tofile = todir + os.sep + filename  
            if os.path.isdir(fromfile):  
                count += self.__copyDir(fromfile,tofile)  
            else:  
                count += self.__copyFile(fromfile,tofile)  
        return count  
  
    def __copyFile(self,fromfile,tofile):  
        if not os.path.exists(tofile) :  
            shutil.copy2(fromfile,tofile)  
            logging.info("新增%s ==> %s" % (fromfile,tofile))  
            return 1  
        fromstat = os.stat(fromfile)  
        tostat = os.stat(tofile)  
        if fromstat.st_ctime > tostat.st_ctime:  
            shutil.copy2(fromfile,tofile)  
            logging.info("更新%s ==> %s" % (fromfile,tofile))  
            return 1  
        return 0  
  
  
    def __mkdir(self,path):  
        # 去除首位空格  
        path=path.strip()  
        # 去除尾部 \ 符号 或者 /  
        path=path.rstrip(os.sep)  
  
        # 判断路径是否存在  
        isExists=os.path.exists(path)  
  
        # 判断结果  
        if not isExists:  
            # 如果不存在则创建目录  
            logging.info(path+' 目录创建成功')  
            # 创建目录操作函数  
            os.makedirs(path)  
if __name__ == '__main__':  
    srcdir=sys.argv[1]  
    descdir=sys.argv[2]  
    logging.basicConfig(filename='SynDirTool.log', level=logging.INFO)  
    tool = SynDirTool(srcdir,descdir)  
    count += tool.synDir()
ログイン後にコピー

注:

1. ログは、SynDirTool.py ファイルと同じディレクトリにある SynDirTool.log ファイルに出力されます

2. 宛先フォルダーにファイルが既に存在する場合。 、ファイルが新しい場合、ソースフォルダー内のファイルはコピーされなくなります


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート