当前位置: 首页 > wzjs >正文

怎么做学校网站和微信公众号互联网运营主要做什么

怎么做学校网站和微信公众号,互联网运营主要做什么,个人简历代写,公司国外网站建设📁 文件夹结构映射工具 | PyQt5实现多模式目录复制详解 🌈 个人主页:创客白泽 - CSDN博客 🔥 系列专栏:🐍《Python开源项目实战》 💡 热爱不止于代码,热情源自每一个灵感闪现的夜晚。…

📁 文件夹结构映射工具 | PyQt5实现多模式目录复制详解

请添加图片描述

🌈 个人主页:创客白泽 - CSDN博客
🔥 系列专栏:🐍《Python开源项目实战》
💡 热爱不止于代码,热情源自每一个灵感闪现的夜晚。愿以开源之火,点亮前行之路。
👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更多人哦

请添加图片描述
在这里插入图片描述


概述

在日常工作中,我们经常需要对文件夹结构进行复制和备份,比如仅复制一级目录,或者完整复制多级目录,有时还希望连同文件名及后缀创建空文件。手动操作既费时又容易出错。为了解决这个问题,本文将带来一款基于PyQt5开发的「文件夹结构映射工具」,支持拖拽选取路径,三种复制模式,操作简单直观,极大提升工作效率。

本工具代码精炼,功能实用,界面美观,适合文件管理、项目结构迁移、代码备份等多种场景使用。文章将深入解析程序设计思路、界面布局、功能实现,并附上完整源码下载,方便读者学习和二次开发。


功能亮点

  • 路径拖拽与浏览双重选择:支持从资源管理器拖拽文件夹路径到输入框,也可以点击“浏览”按钮选择目录,操作灵活便捷。
  • 多复制模式支持
    • 仅复制一级目录结构(不进入子文件夹)
    • 复制多级目录结构(仅文件夹,无文件)
    • 复制多级目录结构并创建空文件(文件名与后缀保持一致)
  • 路径有效性校验:自动检测源路径和目标路径是否合理,防止错误操作。
  • 界面简洁美观:采用淡雅配色和流畅交互,按钮及控件布局合理,使用体验良好。
  • 详细提示反馈:复制完成后弹窗显示创建文件夹数,异常情况及时警告。

展示效果

在这里插入图片描述

在这里插入图片描述

  • 左侧文本框支持拖拽粘贴目录路径
  • 右侧按钮可弹出系统文件夹选择窗口
  • 中间清晰显示复制模式单选选项
  • 右下角“开始映射结构”按钮启动复制
  • 复制完成弹窗告知成功与否

软件使用步骤

  1. 选择源路径
    • 可直接拖拽文件夹至左侧输入框,或点击“浏览”按钮弹出选择窗口,选择想复制的文件夹。
  2. 选择目标路径
    • 同样支持拖拽或浏览选择,指定复制结果保存位置。注意目标路径不能是源路径的子目录。
  3. 选择复制模式
    • 仅复制一级目录
    • 复制多级目录结构,不含文件
    • 复制多级目录结构并创建空文件
      根据需求选择。
  4. 点击“开始映射结构”
    • 程序将按选定模式复制目录结构。完成后弹窗显示操作结果。
  5. 查看目标路径
    • 目标路径将生成对应的目录结构(及空文件),验证复制是否正确。

代码解析

1. 主窗口设计(FolderCopyApp)

继承自QWidget,设置窗口标题、尺寸和基础样式,调用init_ui()方法构建界面。

self.setWindowTitle("📁 文件夹结构映射工具")
self.setGeometry(300, 300, 600, 350)
self.setStyleSheet("""background-color: #f4f6f9;font-family: "Segoe UI";font-size:14px;
""")

2. 拖拽路径输入框(DropLineEdit)

继承自QLineEdit,重写dragEnterEventdropEvent实现路径拖拽识别,提升用户体验。

 def dragEnterEvent(self, e):if e.mimeData().hasUrls():e.accept()else:e.ignore()def dropEvent(self, e):if e.mimeData().hasUrls():path = e.mimeData().urls()[0].toLocalFile()self.setText(path)

3. 界面布局与控件绑定

  • 使用QVBoxLayout整体垂直布局
  • 每个路径输入区用QHBoxLayout横向放置文本框和浏览按钮
  • 复制模式通过QGroupBoxQRadioButton呈现,默认选择一级目录复制
  • “开始映射结构”按钮绑定复制功能
self.copy_btn.clicked.connect(self.copy_structure)

4. 复制结构核心逻辑

copy_structure函数根据模式执行不同目录复制:

  • 一级目录复制
 or name in os.listdir(source):full_path = os.path.join(source, name)if os.path.isdir(full_path):os.makedirs(os.path.join(target, name), exist_ok=True)
  • 多级目录复制
for root, dirs, files in os.walk(source):rel_path = os.path.relpath(root, source)target_dir = os.path.join(target, rel_path)os.makedirs(target_dir, exist_ok=True)

- **多级目录复制 + 空文件**
if mode == "with_files":for file in files:open(os.path.join(target_dir, file), 'w').close()

5. 异常处理和提示

  • 校验路径有效性,防止错误操作
  • 捕获异常,弹窗反馈错误
  • 复制完成后提示创建目录数量

源码下载

import sys
import os
from PyQt5.QtWidgets import (QApplication, QWidget, QLabel, QLineEdit, QPushButton,QVBoxLayout, QHBoxLayout, QFileDialog, QRadioButton,QGroupBox, QMessageBox
)
from PyQt5.QtCore import Qtclass DropLineEdit(QLineEdit):def __init__(self, *args):super().__init__(*args)self.setAcceptDrops(True)def dragEnterEvent(self, e):if e.mimeData().hasUrls():e.accept()else:e.ignore()def dropEvent(self, e):if e.mimeData().hasUrls():path = e.mimeData().urls()[0].toLocalFile()self.setText(path)class FolderCopyApp(QWidget):def __init__(self):super().__init__()self.setWindowTitle("📁 文件夹结构映射工具")self.setGeometry(300, 300, 600, 350)self.setStyleSheet("""background-color: #f4f6f9;font-family: "Segoe UI";font-size:14px;""")self.init_ui()def init_ui(self):layout = QVBoxLayout()# 源路径source_layout = QHBoxLayout()self.source_input = DropLineEdit()browse_source = QPushButton("浏览")browse_source.setFixedWidth(60)browse_source.setStyleSheet(self.button_style())browse_source.clicked.connect(self.select_source)self.add_field("源路径(拖拽或选择)", self.source_input, browse_source, layout, source_layout)# 目标路径target_layout = QHBoxLayout()self.target_input = DropLineEdit()browse_target = QPushButton("浏览")browse_target.setFixedWidth(60)browse_target.setStyleSheet(self.button_style())browse_target.clicked.connect(self.select_target)self.add_field("目标路径(拖拽或选择)", self.target_input, browse_target, layout, target_layout)# 模式选择self.mode_group = QGroupBox("选择复制模式")self.mode_group.setStyleSheet("QGroupBox { font-weight: bold; }")mode_layout = QVBoxLayout()self.level1_radio = QRadioButton("仅复制一级目录结构")self.multilevel_radio = QRadioButton("复制多级目录结构(不含文件)")self.with_files_radio = QRadioButton("复制多级结构 + 空文件(保留名称与后缀)")self.level1_radio.setChecked(True)mode_layout.addWidget(self.level1_radio)mode_layout.addWidget(self.multilevel_radio)mode_layout.addWidget(self.with_files_radio)self.mode_group.setLayout(mode_layout)layout.addWidget(self.mode_group)# 操作按钮self.copy_btn = QPushButton("🚀 开始映射结构")self.copy_btn.setStyleSheet(self.button_style())self.copy_btn.clicked.connect(self.copy_structure)layout.addWidget(self.copy_btn)self.setLayout(layout)def add_field(self, label_text, line_edit, button, layout, sublayout):label = QLabel(label_text)label.setStyleSheet("color: #333;")layout.addWidget(label)sublayout.addWidget(line_edit)sublayout.addWidget(button)layout.addLayout(sublayout)def button_style(self):return """QPushButton {background-color: #5c9ded;color: white;border: none;padding: 6px 12px;border-radius: 4px;font-family: "Segoe UI", "Roboto", "Helvetica Neue", Arial, sans-serif;font-weight: bold;}QPushButton:hover {background-color: #468be6;}"""def select_source(self):path = QFileDialog.getExistingDirectory(self, "选择源目录")if path:self.source_input.setText(path)def select_target(self):path = QFileDialog.getExistingDirectory(self, "选择目标目录")if path:self.target_input.setText(path)def copy_structure(self):source = self.source_input.text().strip()target = self.target_input.text().strip()mode = "level1" if self.level1_radio.isChecked() else \"multilevel" if self.multilevel_radio.isChecked() else "with_files"if not source or not target:QMessageBox.warning(self, "错误", "请设置源路径和目标路径")returnif not os.path.exists(source):QMessageBox.warning(self, "错误", "源路径无效")returnif os.path.commonpath([source]) == os.path.commonpath([source, target]):QMessageBox.warning(self, "错误", "目标路径不能位于源路径内部")returntry:created = 0if mode == "level1":# 仅复制一级目录结构(直接子文件夹)for name in os.listdir(source):full_path = os.path.join(source, name)if os.path.isdir(full_path):os.makedirs(os.path.join(target, name), exist_ok=True)created += 1else:for root, dirs, files in os.walk(source):rel_path = os.path.relpath(root, source)target_dir = os.path.join(target, rel_path)os.makedirs(target_dir, exist_ok=True)created += 1if mode == "with_files":for file in files:try:open(os.path.join(target_dir, file), 'w').close()except Exception as fe:print(f"无法创建文件:{file}, 错误:{fe}")QMessageBox.information(self, "完成", f"结构复制完成,创建文件夹数:{created}")except Exception as e:QMessageBox.critical(self, "错误", str(e))if __name__ == "__main__":app = QApplication(sys.argv)window = FolderCopyApp()window.show()sys.exit(app.exec_())

总结

这款基于PyQt5的「文件夹结构映射工具」功能实用,代码清晰,界面友好,适合所有需要目录结构复制的场景。通过拖拽输入和多复制模式满足不同用户需求。本文不仅介绍了工具功能,还详细剖析了关键代码和实现细节。希望对您学习PyQt5 GUI开发、文件系统操作提供有价值的参考。

欢迎留言讨论,点赞收藏!如果您有更多功能需求或改进建议,也欢迎分享!

http://www.dtcms.com/wzjs/476994.html

相关文章:

  • 网站建设的难点电商网站项目
  • 网站建设业务员怎么着客户免费观看短视频的app软件推荐
  • 江苏做网站怎么收费seo关键词优化推广
  • 网站建设公司哪家强seo综合优化公司
  • 建个网站需要多少钱?建网站要多少钱站内推广方式有哪些
  • 移动端网站建设石家庄疫情太严重了
  • 网站运营与推广班级优化大师官网
  • 原阳网站建设哪家好青岛网站设计
  • 网站服务器做缓存吗seo发贴软件
  • 网站模板文件不存在东莞seo黑帽培训
  • 金融网站策划seo链接优化
  • 东莞营销商城网站建设百度seo关键词优化排名
  • 长沙 网站建设上海百度推广优化
  • 网站制作技术介绍长春关键词搜索排名
  • 网站建设和销售有关吗东莞营销网站建设
  • 无锡网站制作哪家强他达拉非的副作用和危害
  • 广州做包包的网站好文章发布在哪个平台好
  • 网站建设微金手指排名seo自动刷外链工具
  • 网站建设锚点链接app拉新项目一手渠道商
  • 手机怎么做三个视频网站北京seo收费
  • 做静态网站的软件网络推广费用预算表
  • 乐清网站制作公司有哪些关键词seo报价
  • 武汉做网站比较好的公司安卓优化大师官方版本下载
  • 怎么用数据库做动态网站福州seo兼职
  • 中国建设银行征信中心网站如何创建网站站点
  • wordpress教程 百度云流程优化的七个步骤
  • 聊城高端网站建设价格2023北京封控了
  • 网站怎么做404页面跳转合肥seo排名扣费
  • 做胃肠科医院网站费用网络营销的认识
  • 福山区建设工程质量检测站网站百度登录入口官网