【问题标题】:Copying subfolders and files from one folder only if they don't exist in another folder仅当另一个文件夹中不存在子文件夹和文件时才从一个文件夹复制子文件夹和文件
【发布时间】:2021-05-21 22:22:05
【问题描述】:

我有一个主文件夹,其中包含许多子文件夹和文件,还有一个子文件夹。

将新文件添加到主文件夹时,我需要更新该文件(如果该文件存在),或者将该文件与任何子文件夹(如果存在)一起添加到子文件夹中。但是,我不想删除子文件夹中存在但主文件夹中缺少的任何文件。

我正在计算子文件夹和主文件夹中所有文件的 MD5 校验和,以确定哪些文件需要更新/创建。

import os
import hashlib

def md5_checksum(filename):
    m = hashlib.md5()
    with open(filename, 'rb') as f:
        for data in iter(lambda: f.read(1024 * 1024), b''):
            m.update(data)
    return m.hexdigest()

def getListOfFiles(dirName):
    listOfFile = os.listdir(dirName)
    allFiles = list()
    for entry in listOfFile:
        fullPath = os.path.join(dirName, entry)
        if os.path.isdir(fullPath):
            allFiles = allFiles + getListOfFiles(fullPath)
        else:
            allFiles.append(fullPath+"::"+md5_checksum(fullPath))               
    return allFiles

local_path=r'C:\test'
incoming_path=os.path.join(local_path,'Incoming') ## Master Folder
existing_path=os.path.join(local_path,'Colors') ## Child Folder

existing_list=getListOfFiles(existing_path)
download_list=getListOfFiles(incoming_path)
existing_md5=[]
for file in existing_list:
    existing_md5.append(file.split('::')[1])
for file in download_list:
    if file.split('::')[1] not in existing_md5:
        print(file.split('::')[0])

但是,我不确定如何使子文件夹结构以及文件的复制相同?

【问题讨论】:

  • 我认为os.mkdirsos.path.relative 应该可以帮助您构建所需的路径文件夹结构。然后shutils.move就可以用来复制文件了。
  • os.walk 是浏览文件夹和文件层次结构的好工具。

标签: python python-3.x


【解决方案1】:

事实证明,有一个 Python 库可以满足这个要求,称为 dirsync。

https://pypi.org/project/dirsync/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 2023-01-14
    • 1970-01-01
    • 2023-01-11
    • 2022-01-13
    相关资源
    最近更新 更多