Форум сайта python.su
Здравствуйте.
Есть у меня такая программка которая удаляет файлы из папки пользователя.
И я ещё хотел бы добавить код на очистку папки, например очистить всё содержимое папки (“APPDATA\1”)
Как можно это сделать ?
Как в нижнем коде ну только на очистку папки.
#main.py
from builtins import super from PyQt5 import QtWidgets from ui import Ui_Form from pathlib import Path import os import sys class Form(QtWidgets.QMainWindow): def __init__(self): super(Form, self).__init__() self.ui = Ui_Form() self.ui.setupUi(self) self.init_UI() # ------------------------------------------------------------- def init_UI(self): # Кнопки pushButton self.ui.pushButton.clicked.connect(self.baseboard) # ------------------------------------------------------------- def baseboard(self): # Вывести информацию txt_path = f"{os.getenv('LOCALAPPDATA')}" # Определим список с именами лишних файлов del_list = ('1.txt', '2.txt', '3.txt') # поочередно проходим по элементам списка del_list for file_name in del_list: # определяем путь к текущему файлу с именем file_name file_path = Path(txt_path, file_name) # если файл по пути file_path существует, if Path.exists(file_path): # удаляем его и выводим сообщение об успешном удалении Path.unlink(file_path) self.ui.textBrowser.append(f"Файл {file_name} удален\n") else: self.ui.textBrowser.append(f"Файл {file_name} не найден\n") app = QtWidgets.QApplication([]) application = Form() application.show() sys.exit(app.exec())
from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(390, 221) self.pushButton = QtWidgets.QPushButton(Form) self.pushButton.setGeometry(QtCore.QRect(20, 180, 75, 23)) self.pushButton.setObjectName("pushButton") self.textBrowser = QtWidgets.QTextBrowser(Form) self.textBrowser.setGeometry(QtCore.QRect(105, 10, 261, 192)) self.textBrowser.setObjectName("textBrowser") self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "Form")) self.pushButton.setText(_translate("Form", "Кнопка")) if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) Form = QtWidgets.QWidget() ui = Ui_Form() ui.setupUi(Form) Form.show() sys.exit(app.exec_())
Отредактировано Serge (Апрель 8, 2023 13:06:50)
Прикреплённый файлы:
Python.rar (1,3 KБ)
Офлайн
Нашёл способ, ну если в папке находится файл только для чтения то программа закрывается.
Как это исправить ?
from builtins import super from PyQt5 import QtWidgets from ui import Ui_Form from pathlib import Path import os import sys import os import shutil from os import path import os, glob class Form(QtWidgets.QMainWindow): def __init__(self): super(Form, self).__init__() self.ui = Ui_Form() self.ui.setupUi(self) self.init_UI() # ------------------------------------------------------------- def init_UI(self): # Кнопки checkBox self.ui.pushButton.clicked.connect(self.baseboard) # ------------------------------------------------------------- def baseboard(self): # Вывести информацию folder = path.expandvars(r'%APPDATA%\1') for the_file in os.listdir(folder): file_path = os.path.join(folder, the_file) try: if os.path.isfile(file_path): os.unlink(file_path) elif os.path.isdir(file_path): shutil.rmtree(file_path) except Path.exists(file_path): Path.unlink(file_path) else: self.ui.textBrowser.append(f"Файл {the_file} Удалён\n") app = QtWidgets.QApplication([]) application = Form() application.show() sys.exit(app.exec())
Офлайн
Сделай класс FileOperator или что-то наподобие. В нём добавь методы навроде get_folder_path(), get_folder_list(), is_folder(), remove_folder(), is_file(), remove_file() . И потом пусть объект класса формы Form общается с объектом этого класса FileOperator. А сам этот класс FileOperator ты можешь отладить в консоли.
Не делай всё вперемешку. Учись разрабатывать модульно. Имеются в виду не модули питона, а модули программы. Когда тебе нужно сделать какое-то действие, выполнить какую-то задачу, ты передаёшь её на выполнение модулю. А модулем может быть какая-то функция или набор функций. Вот часто удобно набор функций объединить в каком-то объекте просто. И таким образом для выполнения задачи ты просто передаёшь её объекту, который всё умеет делать, он задачу выполняет и возвращает тебе результат.
Вот пример модуля Writer, который используется для разных задач
>>> class Writer: ... ... def write_a(self): ... print('a', end='') ... ... def write_b(self): ... print('b', end='') ... ... def write_c(self): ... print('c', end='') ... >>> def write_abc(): ... writer = Writer() ... writer.write_a() ... writer.write_b() ... writer.write_c() ... >>> def write_cba(): ... writer = Writer() ... writer.write_c() ... writer.write_b() ... writer.write_a() ... >>> def write_abccba(): ... write_abc() ... write_cba() ... >>> def write_text(): ... write_abccba() ... print() ... >>> write_text() abccba >>>
Отредактировано py.user.next (Апрель 9, 2023 03:30:50)
Офлайн
py.user.next
Сделай класс FileOperator или что-то наподобие. В нём добавь методы навроде get_folder_path(), get_folder_list(), is_folder(), remove_folder(), is_file(), remove_file() . И потом пусть объект класса формы Form общается с объектом этого класса FileOperator. А сам этот класс FileOperator ты можешь отладить в консоли.Не делай всё вперемешку. Учись разрабатывать модульно. Имеются в виду не модули питона, а модули программы. Когда тебе нужно сделать какое-то действие, выполнить какую-то задачу, ты передаёшь её на выполнение модулю. А модулем может быть какая-то функция или набор функций. Вот часто удобно набор функций объединить в каком-то объекте просто. И таким образом для выполнения задачи ты просто передаёшь её объекту, который всё умеет делать, он задачу выполняет и возвращает тебе результат.Вот пример модуля Writer, который используется для разных задач
Офлайн