Найти - Пользователи
Полная версия: Очистить папку не удаляя самой папки.
Начало » Python для новичков » Очистить папку не удаляя самой папки.
1
Serge
Здравствуйте.
Есть у меня такая программка которая удаляет файлы из папки пользователя.

И я ещё хотел бы добавить код на очистку папки, например очистить всё содержимое папки (“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())

#ui.py

 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
Нашёл способ, ну если в папке находится файл только для чтения то программа закрывается.
Как это исправить ?

 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())
py.user.next
Сделай класс 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
>>>
Задачи для модуля здесь - это подпрограмма write_abc() и подпрограмма write_cba().
Дальше задачи для модуля, представленные в виде двух подпрограмм, группируются в подпрограмме write_abccba(), которая про модуль Writer вообще не знает.
И дальше подпрограмма write_abccba() используется в подпрограмме write_text(), где кроме неё ещё используется подпрограмма print().

Вот эти понятия - модуль, подпрограмма - это понятия из теории программирования, которая является одной и той же для всех языков программирования. Но вот реализованы эти понятия в разных языках по-разному, а какие-то понятия, которые есть в теории программирования, в каких-то языках не реализованы вообще.

В питоне, например, есть конструкции такие: класс, модуль, пакет. Это названия из питона.
В контексте теории программирования питоновский класс - это модуль, питоновский модуль - это модуль модулей, а питоновский пакет - это модуль модулей модулей.

В других языках вообще всё по другому. Пакет в питоне и пакет в Java, например, - вообще разные понятия и по-разному работают.


tags: module
Serge
py.user.next
Сделай класс FileOperator или что-то наподобие. В нём добавь методы навроде get_folder_path(), get_folder_list(), is_folder(), remove_folder(), is_file(), remove_file() . И потом пусть объект класса формы Form общается с объектом этого класса FileOperator. А сам этот класс FileOperator ты можешь отладить в консоли.Не делай всё вперемешку. Учись разрабатывать модульно. Имеются в виду не модули питона, а модули программы. Когда тебе нужно сделать какое-то действие, выполнить какую-то задачу, ты передаёшь её на выполнение модулю. А модулем может быть какая-то функция или набор функций. Вот часто удобно набор функций объединить в каком-то объекте просто. И таким образом для выполнения задачи ты просто передаёшь её объекту, который всё умеет делать, он задачу выполняет и возвращает тебе результат.Вот пример модуля Writer, который используется для разных задач

Очень интересно спасибо, буду разбираться.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB