“D:\新建文件夹”和“E:\新建文件夹”里均有文件夹,文件夹里还有文件夹和文件,使用python如何实现两个文件夹同步。要求:
1.“D:\新建文件夹”里有的文件夹或文件,“E:\新建文件夹”里没有的就复制过去;反之,“E:\新建文件夹”里有的文件夹或文件,“D:\新建文件夹”里没有的就复制过去。同步文件路径相同,如:“D:\新建文件夹\数据分析\”中的”2月数据.excel“同步过去时也要放到”新建文件夹\数据分析\”中。(在遍历源文件夹内的文件时,先判定当前文件这是文件还是文件夹。如果当前文件是文件夹的话,开始遍历此文件夹内的文件,如果里面还有文件夹,遍历这个文件夹,依次类推。)
2.“D:\新建文件夹”和“E:\新建文件夹”里均有同个文件的情况下,最新修改的文件覆盖旧文件,修改时间相同就跳过。
现有库 dirsync
自我实现
os.walk
遍历源文件夹中的所有文件和子文件夹,获取源文件夹下所有文件的路径和最后修改时间,并将它们存储在一个字典中。os.walk
遍历目标文件夹中的所有文件和子文件夹,获取目标文件夹下所有文件的路径和最后修改时间,并将它们存储在另一个字典中。下面是一个简单的示例代码,它假设您要将源文件夹的内容同步到目标文件夹中:
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上运行,并且会在目标文件夹中创建与源文件夹相同的目录结构,只复制源文件夹中最新修改的文件到目标文件夹中。
可以使用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中已经存在相同的文件夹,会跳过该文件夹的同步。如果目标文件夹不存在,则会自动创建。
可以看看专门的同步工具,主要是Linux系统的,比如rsync。
如果需要,我自己也写了一个python的备份包,稍微有点大。因为我使用了sqlite3数据库。傻瓜配置,只需自己配置定时任务就OK。