100个python小工具002:目录同步工具

2024-05-23 17:16 100个python小工具002:目录同步工具已关闭评论

要使用Tkinter实现从目录A同步文件到目录B的功能,我们可以创建一个图形界面,让用户分别选择这两个目录,然后点击按钮执行同步操作。这里是一个简单的实现示例:

import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox
import os
import shutil

def select_directory_a():
    global dir_a
    dir_a = filedialog.askdirectory()
    if dir_a:
        label_dir_a.config(text="目录A: " + dir_a)

def select_directory_b():
    global dir_b
    dir_b = filedialog.askdirectory()
    if dir_b:
        label_dir_b.config(text="目录B: " + dir_b)

def sync_directories():
    if not dir_a or not dir_b:
        messagebox.showerror("错误", "请先选择目录A和目录B!")
        return

    try:
        for item in os.listdir(dir_a):
            src_path = os.path.join(dir_a, item)
            dst_path = os.path.join(dir_b, item)

            # 如果是文件,则直接复制
            if os.path.isfile(src_path):
                shutil.copy2(src_path, dst_path)
            # 如果是目录,则递归复制整个目录
            elif os.path.isdir(src_path):
                shutil.copytree(src_path, dst_path, dirs_exist_ok=True)
        messagebox.showinfo("成功", "目录A的内容已同步到目录B。")
    except Exception as e:
        messagebox.showerror("错误", f"同步过程中发生错误:{str(e)}")

def main():
    global dir_a, dir_b, label_dir_a, label_dir_b

    root = tk.Tk()
    root.title("目录同步工具")

    tk.Label(root, text="选择目录A:").pack()
    tk.Button(root, text="浏览", command=select_directory_a).pack()
    label_dir_a = tk.Label(root, text="目录A: ")
    label_dir_a.pack()

    tk.Label(root, text="选择目录B:").pack()
    tk.Button(root, text="浏览", command=select_directory_b).pack()
    label_dir_b = tk.Label(root, text="目录B: ")
    label_dir_b.pack()

    tk.Button(root, text="开始同步", command=sync_directories).pack()

    root.mainloop()

if __name__ == "__main__":
    main()

这段代码首先创建了两个按钮用于选择目录A和目录B,以及一个按钮用于启动同步过程。select_directory_aselect_directory_b 函数分别用于打开目录选择对话框并更新对应的标签显示所选目录。sync_directories 函数则负责执行实际的同步逻辑,它遍历目录A中的所有文件和子目录,并使用shutil.copy2shutil.copytree函数将它们复制到目录B中,其中copy2用于文件的复制(保留元数据如修改时间),而copytree用于递归复制目录。注意,如果目录B中已经存在同名文件或目录,shutil.copytreedirs_exist_ok=True参数会覆盖这一限制,直接在已存在的目录下复制文件或子目录,不会抛出异常。

当前文章价值0.52元,扫一扫支付后添加微信提供帮助!(如不能解决您的问题,可以申请退款)

你可能感兴趣的文章

来源:每日教程每日一例,深入学习实用技术教程,关注公众号TeachCourse
转载请注明出处: https://teachcourse.cn/3454.html ,谢谢支持!

资源分享

分类:windows 标签:, ,
php7.0-fpm启动启动异常 php7.0-fpm启动启动异常
Android控件ListView熟悉divider详细介绍和示例说明 Android控件ListView熟悉divi
浅谈json的封装和解析 浅谈json的封装和解析
配置Linux主机防盗链 配置Linux主机防盗链

评论已关闭!