首页 新闻 会员 周边 捐助

python如何实现两个文件夹同步(最新修改的文件覆盖旧文件)

0
悬赏园豆:100 [待解决问题]

“D:\新建文件夹”和“E:\新建文件夹”里均有文件夹,文件夹里还有文件夹和文件,使用python如何实现两个文件夹同步。要求:

1.“D:\新建文件夹”里有的文件夹或文件,“E:\新建文件夹”里没有的就复制过去;反之,“E:\新建文件夹”里有的文件夹或文件,“D:\新建文件夹”里没有的就复制过去。同步文件路径相同,如:“D:\新建文件夹\数据分析\”中的”2月数据.excel“同步过去时也要放到”新建文件夹\数据分析\”中。(在遍历源文件夹内的文件时,先判定当前文件这是文件还是文件夹。如果当前文件是文件夹的话,开始遍历此文件夹内的文件,如果里面还有文件夹,遍历这个文件夹,依次类推。)

2.“D:\新建文件夹”和“E:\新建文件夹”里均有同个文件的情况下,最新修改的文件覆盖旧文件,修改时间相同就跳过。

梦消遥的主页 梦消遥 | 初学一级 | 园豆:102
提问于:2023-02-22 16:33
< >
分享
所有回答(4)
0

现有库 dirsync
自我实现

  1. os.walk 遍历文件
  2. os.path.getmtime 获取文件修改时间
  3. 两两比较用 set 处理,例如:对称差集结果为不用比对修改时间的文件 (集合内容暂时只考虑 全称_修改时间)
〆灬丶 | 园豆:2314 (老鸟四级) | 2023-02-23 10:59
0
  1. 使用os.walk遍历源文件夹中的所有文件和子文件夹,获取源文件夹下所有文件的路径和最后修改时间,并将它们存储在一个字典中。
  2. 使用os.walk遍历目标文件夹中的所有文件和子文件夹,获取目标文件夹下所有文件的路径和最后修改时间,并将它们存储在另一个字典中。
  3. 对比两个字典,将源文件夹中最新修改的文件复制到目标文件夹中,覆盖同名文件。

下面是一个简单的示例代码,它假设您要将源文件夹的内容同步到目标文件夹中:

pythonCopy codeimport os
import shutil

def sync_folders(source_folder, target_folder):

    source_files = {}
    for root, dirs, files in os.walk(source_folder):
        for file in files:
            file_path = os.path.join(root, file)
            source_files[file_path] = os.path.getmtime(file_path)

    target_files = {}
    for root, dirs, files in os.walk(target_folder):
        for file in files:
            file_path = os.path.join(root, file)
            target_files[file_path] = os.path.getmtime(file_path)

  
    for file_path, modified_time in source_files.items():
        if file_path in target_files and target_files[file_path] >= modified_time:
            # The file in target folder is already up-to-date
            continue

        target_path = file_path.replace(source_folder, target_folder)
        target_dir = os.path.dirname(target_path)
        if not os.path.exists(target_dir):
            os.makedirs(target_dir)
        shutil.copy2(file_path, target_path)

if __name__ == '__main__':
    source_folder = '/path/to/source/folder'
    target_folder = '/path/to/target/folder'
    sync_folders(source_folder, target_folder)

这个代码可以在Unix和Windows上运行,并且会在目标文件夹中创建与源文件夹相同的目录结构,只复制源文件夹中最新修改的文件到目标文件夹中。

太阳是白的 | 园豆:206 (菜鸟二级) | 2023-02-23 11:46
0

可以使用Python中的shutil模块和os模块来实现两个文件夹同步。

下面是一个简单的实现方法,可以将其中一个文件夹的内容同步到另一个文件夹中,并保证最新修改的文件覆盖旧文件:

import os
import shutil

def sync_folders(src_folder, dst_folder):
    for item in os.listdir(src_folder):
        src_path = os.path.join(src_folder, item)
        dst_path = os.path.join(dst_folder, item)
        if os.path.isdir(src_path):
            if not os.path.exists(dst_path):
                os.makedirs(dst_path)
            sync_folders(src_path, dst_path)
        else:
            if not os.path.exists(dst_path) or os.path.getmtime(src_path) > os.path.getmtime(dst_path):
                shutil.copy2(src_path, dst_path)

使用方法

sync_folders('source_folder', 'destination_folder')

其中,source_folder是源文件夹,destination_folder是目标文件夹。该函数会将source_folder中的所有文件和文件夹同步到destination_folder中,并且最新修改的文件会覆盖旧文件。如果destination_folder中已经存在相同的文件夹,会跳过该文件夹的同步。如果目标文件夹不存在,则会自动创建。

心若向阳花自开 | 园豆:290 (菜鸟二级) | 2023-03-08 14:40
0

可以看看专门的同步工具,主要是Linux系统的,比如rsync。
如果需要,我自己也写了一个python的备份包,稍微有点大。因为我使用了sqlite3数据库。傻瓜配置,只需自己配置定时任务就OK。

stone9693 | 园豆:221 (菜鸟二级) | 2023-10-26 18:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册