我是靠谱客的博主 勤劳汽车,最近开发中收集的这篇文章主要介绍python代码如何删除_如何删除python中文件夹的内容?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

注意:如果有人投了我的反对票,我有一些事情要解释。

每个人都喜欢简短的回答。然而,有时候现实并不那么简单。

回到我的答案。我知道

shutil.rmtree()

可用于删除目录树。我在自己的项目中使用过很多次。但你必须意识到

目录本身也将被删除

SUTIL.RTERE()

. 虽然这可能对某些人来说是可以接受的,但这不是一个有效的答案

删除文件夹的内容(无副作用)

.

我给你举个副作用的例子。假设您有一个目录

定制的

所有者和模式位,其中有很多内容。然后用删除它

SUTIL.RTERE()

然后用

os.mkdir()

. 你会得到一个空目录

违约

(继承)所有者和模式位。虽然您可能有删除内容甚至目录的特权,但是您可能无法在目录上设置原始所有者和模式位(例如,您不是超级用户)。

最后,

耐心地阅读代码

. 它长而难看(在视线中),但被证明是可靠和有效的(在使用中)。

这是一个长而难看,但可靠和有效的解决方案。

它解决了一些其他回答者没有解决的问题:

它正确处理符号链接,包括不调用

SUTIL.RTERE()

在符号链接上(将通过

os.path.isdir()

测试它是否链接到一个目录;甚至是

os.walk()

也包含符号链接目录)。

它可以很好地处理只读文件。

这是代码(唯一有用的功能是

clear_dir()

):

import os

import stat

import shutil

# http://stackoverflow.com/questions/1889597/deleting-directory-in-python

def _remove_readonly(fn, path_, excinfo):

# Handle read-only files and directories

if fn is os.rmdir:

os.chmod(path_, stat.S_IWRITE)

os.rmdir(path_)

elif fn is os.remove:

os.lchmod(path_, stat.S_IWRITE)

os.remove(path_)

def force_remove_file_or_symlink(path_):

try:

os.remove(path_)

except OSError:

os.lchmod(path_, stat.S_IWRITE)

os.remove(path_)

# Code from shutil.rmtree()

def is_regular_dir(path_):

try:

mode = os.lstat(path_).st_mode

except os.error:

mode = 0

return stat.S_ISDIR(mode)

def clear_dir(path_):

if is_regular_dir(path_):

# Given path is a directory, clear its content

for name in os.listdir(path_):

fullpath = os.path.join(path_, name)

if is_regular_dir(fullpath):

shutil.rmtree(fullpath, οnerrοr=_remove_readonly)

else:

force_remove_file_or_symlink(fullpath)

else:

# Given path is a file or a symlink.

# Raise an exception here to avoid accidentally clearing the content

# of a symbolic linked directory.

raise OSError("Cannot call clear_dir() on a symbolic link")

最后

以上就是勤劳汽车为你收集整理的python代码如何删除_如何删除python中文件夹的内容?的全部内容,希望文章能够帮你解决python代码如何删除_如何删除python中文件夹的内容?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部