Shutil.rmtree To Remove Readonly Files
Solution 1:
After more investigation, the following appears to work:
def del_rw(action, name, exc):
os.chmod(name, stat.S_IWRITE)
os.remove(name)
shutil.rmtree(path, onerror=del_rw)
In other words, actually remove the file in the onerror function. (You might need to check for a directory in the onerror handler and use rmdir in that case - I didn't need that but it may just be something specific about my problem.
Solution 2:
shutil.rmtree is used to delete directories that are not empty (remove tree).
import os
import stat
import shutil
defdel_ro_dir(dir_name):
'''Remove Read Only Directories'''for (root, dirs, files) in os.walk(dir_name, topdown=True):
os.chmod(root,
# For user ...
stat.S_IRUSR |
stat.S_IWUSR |
stat.S_IXUSR |
# For group ...
stat.S_IWGRP |
stat.S_IRGRP |
stat.S_IXGRP |
# For other ...
stat.S_IROTH |
stat.S_IWOTH |
stat.S_IXOTH
)
shutil.rmtree(dir_name)
if __name__ == '__main__':
del_ro_dir('dir_name_here')
To delete a file only, you can use the following code:
import os
import stat
defrmv_rof(file_name):
'''Remov Read Only Files'''if os.path.exists(file_name):
os.chmod(file_name, stat.S_IWRITE)
os.remove(file_name)
else:
print('The file does not exist.')
rmv_rof('file_name_here')
You can read detailed information here:
https://docs.python.org/3/library/os.html#os.chmod
https://docs.python.org/3/library/stat.html#module-stat
https://docs.python.org/3/library/shutil.html#rmtree-example
Solution 3:
You could just go with the quick-and-dirty method and do subprocess.check_call(["rm", "-rf", filename])
. Likely won't work on Windows though.
Post a Comment for "Shutil.rmtree To Remove Readonly Files"