使用Python实现不同目录下文件的拷贝


目标:要实现将一台计算机的共享文件夹中的文件备份到另一台计算机,如果存在同名的文件只要文件的大小和最后修改时间一致,则不拷贝该文件


python版本:Python3.7.1

python脚本:

from datetime import date,datetime
import os
import shutil
import json

source_path = os.path.abspath(r'D:\Video\540409938')
target_path = os.path.abspath(r'D:\Video\540409939')
jsonfilepath = os.path.abspath(target_path + r"\log.json")

def load():
    flag = os.path.exists(jsonfilepath)
    if flag:
        with open(jsonfilepath, 'r', encoding='utf-8') as f:
            data = json.load(f)
            if data == None:
                data = []
            return data
    else:
        with open(jsonfilepath, 'a', encoding='utf-8') as f:
            return []

def store(data):
    with open(jsonfilepath, 'w') as fw:
        json.dump(data,fw)

def makedir(dir):
    if not os.path.exists(dir):
        os.makedirs(dir)

if __name__ == '__main__':
    makedir(target_path)
    logdata = load()
        
    if os.path.exists(source_path):
        # root 所指的是当前正在遍历的这个文件夹的本身的地址
        # dirs 是一个 list,内容是该文件夹中所有的目录的名字(不包括子目录)
        # files 同样是 list, 内容是该文件夹中所有的文件(不包括子目录)
        for root, dirs, files in os.walk(source_path):
            for file in files:
                src_file = os.path.join(root, file)
                fsize = os.path.getsize(src_file)
                fmtime = os.path.getmtime(src_file)
                log={'file':src_file,'fsize':fsize,'fmtime':fmtime}

                iscopy=0
                for item in logdata:
                    # 判断文件是否拷贝过
                    if (item["file"] == src_file and item["fsize"] == fsize and item["fmtime"] == fmtime):
                        iscopy=1
                        break
                
                if iscopy==0:
                    # 未拷贝过则拷贝到当天文件夹下
                    target = target_path + "\\" + date.today().strftime("%Y%m%d")
                    makedir(target)
                    logdata.append(log)
                    shutil.copy(src_file, target)

    store(logdata)
    print('copy files finished!')

 

你可能感兴趣的