Зіткнувся з задачею копіювання файлів в Python. Задача полягала в тому, щоб копіювати повністю структуру папок з одного місця в інше, запускати програму, а пітом видаляти весь вміст, який був скопійованим.
Перші кроки
Перше, що прийшло в голову - використовувати для задачі os.walk(). Дана функція виконує рекурсивний прохід по вказаному шляху, приймаючи параметром папку в якості кореня дерева, яке необхідно обійти. Варто зазначити, що тут важливим параметром є topdown, в тому випадку, якщо ви на кожному кроці хочете виконувати якій дії (в моєму випадку - це прогрес бар, який є індикатором проходження процесу копіювання). Це опціональний параметр, який приймає булеве значення, яке визначає порядок обходу. Для копіювання вирішив використовувати функцію copy модуля shutil, який входить в стандартну бібліотеку python. Вуаля, все працює. Видаляємо файли післе запуску програми, аналогічно обходячи дерево, тільки уже в тій папці, в яку файли були скопійовані.
Невеличка проблемка
Нащо це все? Особливістю даної задачі є те, що файли необхідно копіювати з оптичного носія (CD/DVD-диска). Копіювати на жорсткий диск необхідно, оскільки деякі програми для своії роботы використовують тимчасові файли, а також пишуть дані в файли налаштувань. В чому різниця? А різниця в тому, що при використанні функції copy, файли копіюються разом з бітами доступу, а, оскільки, джерелом є оптичний диск, то вони всі позначені як "тільки для читання".
Рішення
Рішення досить просте - використовувати функцію copyfile з цього ж модуля, який не зберігає біти доступу. Таким чином файли з легкістю можут бути видалені.
Знання - сила
Модуль shutils має також достатньо зручні і корисні функції масової обробки файлів, як, наприклад, copytree, чи rmtree, які дозволяють відмовитись від використання os.walk(). В даному випадку copytree використовувати не вийде, оскільки туди не можна вставити додатковий код на этапі копіювання окремого файлу, а rmtree дуже навіть добре скорочує кількість коду.
Висновки
Знання - сила. Перед вирішенням задачі робимо більш глибоке дослідження готових рішень та інструментів.
Коментарі
Дописати коментар