新建与文件同名的目录来整理文件
拖动文件至窗口,将新建与文件名同名的目录,并将文件移动至其中。
反之,拖动仅有一个同名子文件的目录至窗口,将子文件移出目录,并删除该目录。
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_())