Я использую shutil.rmtree
для удаления каталога, но другие процессы (которые я не контролирую), которые создают файлы в этом дереве, не могут создавать файлы, потому что каталогов не существует. Есть ли что-то такое же простое, как shutil.rmtree
, которое удаляет только файлы, но сохраняет структуру каталогов?shutil.rmtree только для удаления файлов?
3
A
ответ
3
Я не думаю, что есть встроенная функция, чтобы сделать это, но вы легко можете сделать это самостоятельно с помощью os.walk()
:
for dirpath, dirnames, filenames in os.walk(my_directory):
# Remove regular files, ignore directories
for filename in filenames:
os.unlink(os.path.join(dirpath, filename))
0
Если вы хотите сделать это в одной строке, и у вас есть GNU найти, аутсорсинг:
subprocess.check_call(["find", "-H", directory, "!", "-type", "d", "-delete"])
Это также имеет то преимущество, что было очень тщательно закодированы специалистами, чтобы избежать ряда условий гонки, которые могут позволить вредоносный процесс на ту же систему, чтобы обмануть ваш процесс удаления что-то он не должен Не знаю. Я не думаю, что на самом деле можно избежать всех этих рас, используя os.walk
; вам нужен API, который позволяет использовать unlinkat
или fchdir
.
0
, как о чем-то вроде этого:
import os
def rm_files_in_tree(dir):
for root, dirs, files in os.walk(dir):
for file in files:
path = os.path.abspath(os.path.join(root, file))
os.remove(path)
Смежные вопросы
- 1. shutil.rmtree для удаления файлов readonly
- 2. shutil.rmtree() разъяснение
- 3. Logrotate только для удаления старых файлов?
- 4. dir_util.copy_tree терпит неудачу после shutil.rmtree
- 5. Обработчики для удаления файлов
- 6. Ошибка удаления папки shutil.rmtree, файл используется другим процессом
- 7. python shutil.rmtree throwing errors
- 8. Ошибка при выполнении shutil.rmtree
- 9. Посоветуйте скрипт для удаления файлов
- 10. Есть ли команда svn для удаления файлов только с клиента?
- 11. Может ли gulp смотреть только для добавления/удаления файлов?
- 12. Python скрипт для удаления старых файлов SVN не имеет разрешения
- 13. Безопасное использование shutil.rmtree/os.path.join и Directory Traversal
- 14. Пакетное переименование файлов для удаления определенных символов
- 15. Windows, партия команды для удаления папок только
- 16. Предотвращение удаления файлов
- 17. быстрый способ удаления файлов
- 18. включить proguard только для удаления неиспользованного кода
- 19. Сценарий Powershell для удаления старых файлов
- 20. Пакет: команда удаления только для указанного файла
- 21. grgit - для добавления новых файлов и удаления удаленных файлов
- 22. веб-дубликат удаления файлов
- 23. Как игнорировать удаления файлов
- 24. Обнаружение удаления файлов
- 25. Visual Studio PublishProfile для удаления файлов?
- 26. Gulp watch для добавления и удаления файлов
- 27. C# Утилита для удаления периодических файлов
- 28. Что нужно для удаления файлов pdb?
- 29. Powershell для удаления файлов на основе CSV
- 30. wp_cgi.php Ресурсы сервера для удаления файлов
Я думаю, что вам нужно 'os.path.join (my_directory, dirpath, имя файла)', не так ли? – zwol
Не в соответствии с [os.walk] (документация). Соответствующий фрагмент _ Чтобы получить полный путь (который начинается с вершины) к файлу или каталогу в dirpath, выполните os.path.join (dirpath, name) ._ – alejandro