文件处理中常用的Python代码1
一、删除整个目录树
函数:shutil.rmtree(path[, ignore_errors[, onerror]])
该函数删除一个完整的目录树,path必须指向一个目录。如果ignore_errors为True,移除失败的error会被忽略。否则,该error将会被onerror处理。
onerror(funciton, path, excinfo)
onerror是一个可调用的函数。function是产生异常的函数,可以是os.path.islink(), os.listdir(), os.remove()或os.rmdir()。path是传递到function的路径名。excinfo是由sys.exc_info()返回的异常信息。
程序实例
import os, shutil, stat
dirs = [d for d in os.listdir('.') if os.path.isfile(d)]
for d in dirs:
print(str(d))
files = [f for f in os.listdir('.') if os.path.isfile(f)]
for f in files:
print(str(f))
该段程序列出当前目录下所有文件夹和文件名。
def on_rm_error(func, path, exc_info):
os.chmod(path, stat.S_IWRITE)
os.unlink(path)
shutil.rmtree('dirname', onerror = on_rm_error)
该段程序定义了onerror函数,运行了shutil.rmtree,dirname为需要删除的文件夹名,如此处输入为文件名,同样能被删除,但是会产生OSError。
相关函数
- os.listdir
- os.path.isfile
- os.path.isdir
- os.chmod
- os.unlink
详解
os.listdir(path)
该函数返回一个存有该路径下条目名称的list,list按任意顺序存储。
os.path.isfile(path)
若该路径为现有的文件,则返回True。
os.path.isdir(path)
若该路径为现有的目录,则返回True。
os.chmod(path, mode)
该函数改变该路径的读写模式,如参数为stat.S_IWRITE时,可授予只读路径写权限。
os.unlink(path)
该函数等同于os.remove,用来移除(删除)一个文件路径,如果该路径是一个文件夹,OSError异常会被触发。
二、解压缩tar.gz文件并获取文件夹名
步骤 1:获取压缩文件名
函数:os.path.splitext(path)
该函数分离路径名为一对(root, ext),ext为空或仅包含一个句点 ‘.’的后缀名。如path为”file.tar.gz”,为获取file名,代码如下:
import os
filename = "file.tar.gz"
root = os.path.splitext(os.path.splitext(filename)[0])[0]
步骤 2:解压缩文件夹
tarfile函数
使用tarfile解压tar.gz格式的压缩文件,具体代码如下所示:
import tarfile
tar = tarfile.open(filename)
tar.extractall()
tar.close()
步骤 3:获取解压后文件夹下的目录路径
函数:os.path.join(path, *paths)
该函数连接一个或多个path成分,返回串联的path。代码示例如下:
folders = [os.path.join(root, dir) for dir in sorted(os.listdir(root)) if os.path.isdir(os.path.join(root, dir))]
该段代码获取root路径下的所有条目名称的list,与root连接,并将所有属于directory的新path存入folders,即可得到root路径下的所有文件夹名。