【Python+PyQt】新建与文件同名的目录来整理文件(一个文件对应一个目录)

新建与文件同名的目录来整理文件

拖动文件至窗口,将新建与文件名同名的目录,并将文件移动至其中。

反之,拖动仅有一个同名子文件的目录至窗口,将子文件移出目录,并删除该目录。

import os
import shutil
import sys

from PyQt5.QtWidgets import QMainWindow, QApplication, QTreeWidgetItem, QTableWidgetItem, QAbstractItemView
from window import Ui_MainWindow
'''
20231210星期日完成
拖入文件,将新建同名目录,并将文件移动其中。
拖入目录,将其中第一个文件移动至上一级目录,并删除当前目录。(需保证目录中仅有一个同名文件)
'''
__author__ = "五月春生"
current_path = ""


class Window(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.setAcceptDrops(True)  # ==> 必须设置
        self.setWindowTitle('拖入文件,将新建同名目录,并将文件移动其中。重复则复原。')

    def dragEnterEvent(self, event):
        self.list_filelist.clear()
        file_path = []  # 拖入的文件们。
        list_dir = []  # 拖入的目录们。
        for url in event.mimeData().urls():
            str_url = str(url.toLocalFile())
            if os.path.isdir(str_url):  # 如果拖入的是目录,则将其中的同名文件移至上一级目录,并删除该空目录。(需判断目录中是否只有一个同名文件。仅当目录中仅有一个同名文件时才执行。)
                list_dir.append(str_url)
            else:  # 如果拖入的是文件,则接下来新建同名目录并移动文件至其中
                file_path.append(str_url)


        # 与目录操作相关
        if len(list_dir) == 0:
            pass
        else:
            current_path = list_dir[0]
            self.setWindowTitle(current_path)
            for dir in list_dir:
                self.list_filelist.addItem(dir)

                shutil.move(dir + '/' + os.listdir(dir)[0], os.path.dirname(dir))  # 将目录下的第一个文件移出到目录的上一层。
                try:
                    os.rmdir(dir)  # 删除目录
                except:  # 要删除的目录必须是空目录,里面如果还有文件,说明原本就不符合要求。拖入目录里需仅有一个同名文件。
                    pass

        # 与文件操作相关
        if len(file_path) == 0:
            pass
        else:
            current_path = os.path.dirname(file_path[0])
            self.setWindowTitle(current_path)

            for f in file_path:
                filename = f.split('/')[-1]  # 20220330.1.pdf 获取路径中的文件名。
                
                newdirname, suf = os.path.splitext(f)


                self.list_filelist.addItem(filename)  # 文件名“新建文本文档.txt”添加到列表框做个显示。
                try:
                    os.mkdir(newdirname)  # 新建与文件名同名目录
                except:  # 如果同名目录已存在,则啥也不干。
                    pass
                shutil.move(f, newdirname)  # 移动文件到同名目录


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五月春生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值