Python 中的 os 模块
os.access() 检验权限模式
概述
os.access() 方法使用当前的uid/gid尝试访问路径。大部分操作使用有效的 uid/gid, 因此运行环境可以在 suid/sgid 环境尝试。
语法
os.access(path, mode);
参数
-
path -- 要用来检测是否有访问权限的路径。
-
mode -- mode为F_OK,测试存在的路径,或者它可以是包含R_OK, W_OK和X_OK或者R_OK, W_OK和X_OK其中之一或者更多。
- os.F_OK: 作为access()的mode参数,测试path是否存在。
- os.R_OK: 包含在access()的mode参数中 , 测试path是否可读。
- os.W_OK 包含在access()的mode参数中 , 测试path是否可写。
- os.X_OK 包含在access()的mode参数中 ,测试path是否可执行。
返回值
如果允许访问返回 True , 否则返回False。
实例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os, sys
# 假定 /tmp/foo.txt 文件存在,并有读写权限
ret = os.access("/tmp/foo.txt", os.F_OK)
print "F_OK - 返回值 %s"% ret
ret = os.access("/tmp/foo.txt", os.R_OK)
print "R_OK - 返回值 %s"% ret
ret = os.access("/tmp/foo.txt", os.W_OK)
print "W_OK - 返回值 %s"% ret
ret = os.access("/tmp/foo.txt", os.X_OK)
print "X_OK - 返回值 %s"% ret
以上程序输出结果为:
F_OK - 返回值 True
R_OK - 返回值 True
W_OK - 返回值 True
X_OK - 返回值 False
os.chdir() 改变当前工作目录
概述
os.chdir() 方法用于改变当前工作目录到指定的路径。
语法
os.chdir(path)
参数
- path -- 要切换到的新路径。
返回值
如果允许访问返回 True , 否则返回False。
实例
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os, sys
path = "/tmp"
# 查看当前工作目录
retval = os.getcwd()
print "当前工作目录为 %s" % retval
# 修改当前工作目录
os.chdir( path )
# 查看修改后的工作目录
retval = os.getcwd()
print "目录修改成功 %s" % retval
以上程序输出结果为:
当前工作目录为 /www
目录修改成功 /tmp
os.chmod() 更改权限
概述
os.chmod() 方法用于更改文件或目录的权限。
语法
os.chmod(path, mode)
参数
-
path -- 文件名路径或目录路径。
-
flags -- 可用以下选项按位或操作生成, 目录的读权限表示可以获取目录里文件名列表, ,执行权限表示可以把工作目录切换到此目录 ,删除添加目录里的文件必须同时有写和执行权限 ,文件权限以用户id->组id->其它顺序检验,最先匹配的允许或禁止权限被应用。
- stat.S_IXOTH: 其他用户有执行权0o001
- stat.S_IWOTH: 其他用户有写权限0o002
- stat.S_IROTH: 其他用户有读权限0o004
- stat.S_IRWXO: 其他用户有全部权限(权限掩码)0o007
- stat.S_IXGRP: 组用户有执行权限0o010
- stat.S_IWGRP: 组用户有写权限0o020
- stat.S_IRGRP: 组用户有读权限0o040
- stat.S_IRWXG: 组用户有全部权限(权限掩码)0o070
- stat.S_IXUSR: 拥有者具有执行权限0o100
- stat.S_IWUSR: 拥有者具有写权限0o200
- stat.S_IRUSR: 拥有者具有读权限0o400
- stat.S_IRWXU: 拥有者有全部权限(权限掩码)0o700
- stat.S_ISVTX: 目录里文件目录只有拥有者才可删除更改0o1000
- stat.S_ISGID: 执行此文件其进程有效组为文件所在组0o2000
- stat.S_ISUID: 执行此文件其进程有效用户为文件所有者0o4000
- stat.S_IREAD: windows下设为只读
- stat.S_IWRITE: windows下取消只读
返回值
该方法没有返回值。
实例
#!/usr/bin/python3
import os, sys, stat
# 假定 /tmp/foo.txt 文件存在,设置文件可以通过用户组执行
os.chmod("/tmp/foo.txt", stat.S_IXGRP)
# 设置文件可以被其他用户写入
os.chmod("/tmp/foo.txt", stat.S_IWOTH)
print ("修改成功!!")
以上程序输出结果为:
修改成功!!
os.getcwd() 返回当前工作目录
概述
os.getcwd() 方法用于返回当前工作目录。
语法
os.getcwd()
参数
无
返回值
返回当前进程的工作目录。
实例
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os, sys
# 切换到 "/var/www/html" 目录
os.chdir("/var/www/html" )
# 打印当前目录
print "当前工作目录 : %s" % os.getcwd()
# 打开 "/tmp"
fd = os.open( "/tmp", os.O_RDONLY )
# 使用 os.fchdir() 方法修改目录
os.fchdir(fd)
# 打印当前目录
print "当前工作目录 : %s" % os.getcwd()
# 关闭文件
os.close( fd )
以上程序输出结果为:
当前工作目录 : /var/www/html
当前工作目录 : /tmp
os.makedirs() 用于递归创建目录
概述
os.makedirs() 方法用于递归创建目录。像 mkdir(), 但创建的所有intermediate-level文件夹需要包含子目录。
语法
os.makedirs(path, mode=0o777)
参数
-
path -- 需要递归创建的目录。
-
mode -- 权限模式。
返回值
该方法没有返回值。
实例
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os, sys
# 创建的目录
path = "/tmp/home/monthly/daily"
os.makedirs( path, 0755 );
print "路径被创建"
以上程序输出结果为:
路径被创建
os.mkdir() 以数字权限模式创建目录
概述
os.mkdir() 方法用于以数字权限模式创建目录。默认的模式为 0777 (八进制)。
语法
os.mkdir(path[, mode])
参数
-
path -- 要创建的目录
-
mode -- 要为目录设置的权限数字模式
返回值
该方法没有返回值。
实例
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os, sys
# 创建的目录
path = "/tmp/home/monthly/daily/hourly"
os.mkdir( path, 0755 );
print "目录已创建"
以上程序输出结果为:
目录已创建
os.remove() 删除指定路径的文件
概述
os.remove() 方法用于删除指定路径的文件。如果指定的路径是一个目录,将抛出OSError。
语法
os.remove(path)
参数
- path -- 要移除的文件路径
返回值
该方法没有返回值
实例
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os, sys
# 列出目录
print "目录为: %s" %os.listdir(os.getcwd())
# 移除
os.remove("aa.txt")
# 移除后列出目录
print "移除后 : %s" %os.listdir(os.getcwd())
以上程序输出结果为:
目录为:
[ 'a1.txt','aa.txt','resume.doc' ]
移除后 :
[ 'a1.txt','resume.doc' ]
os.removedirs() 递归删除目录(必须为空目录)
概述
os.removedirs() 方法用于递归删除目录。像rmdir(), 如果子文件夹成功删除, removedirs()才尝试它们的父文件夹,直到抛出一个error(它基本上被忽略,因为它一般意味着你文件夹不为空)。
语法
os.removedirs(path)
参数
- path -- 要移除的目录路径
返回值
该方法没有返回值
实例
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os, sys
# 列出目录
print "目录为: %s" %os.listdir(os.getcwd())
# 移除
os.removedirs("/test")
# 列出移除后的目录
print "移除后目录为 %s :" %os.listdir(os.getcwd())
以上程序输出结果为:
目录为:
[ 'a1.txt','resume.doc','a3.py','test' ]
移除后目录为:
[ 'a1.txt','resume.doc','a3.py' ]
os.rmdir() 删除指定路径的目录(不递归父目录)
概述
os.rmdir() 方法用于删除指定路径的目录。仅当这文件夹是空的才可以, 否则, 抛出OSError。
语法
os.rmdir(path)
参数
path -- 要删除的目录路径
返回值
该方法没有返回值
实例
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os, sys
# 列出目录
print "目录为: %s"%os.listdir(os.getcwd())
# 删除路径
os.rmdir("mydir")
# 列出重命名后的目录
print "目录为: %s" %os.listdir(os.getcwd())
以上程序输出结果为:
目录为:
[ 'a1.txt','resume.doc','a3.py','mydir' ]
目录为:
[ 'a1.txt','resume.doc','a3.py' ]
os.rename() 命名文件或目录
概述
os.rename() 方法用于命名文件或目录,从 src 到 dst,如果dst是一个存在的目录, 将抛出OSError。
语法
os.rename(src, dst)
参数
- src -- 要修改的目录名
- dst -- 修改后的目录名
返回值
该方法没有返回值
实例
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os, sys
# 列出目录
print "目录为: %s"%os.listdir(os.getcwd())
# 重命名
os.rename("test","test2")
print "重命名成功。"
# 列出重命名后的目录
print "目录为: %s" %os.listdir(os.getcwd())
以上程序输出结果为:
目录为:
[ 'a1.txt','resume.doc','a3.py','test' ]
重命名成功。
[ 'a1.txt','resume.doc','a3.py','test2' ]
os.renames() 用于递归重命名目录或文件
概述
os.renames() 方法用于递归重命名目录或文件。类似rename()。
语法
os.renames(old, new)
参数
- old -- 要重命名的目录
- new --文件或目录的新名字。甚至可以是包含在目录中的文件,或者完整的目录树。
返回值
该方法没有返回值
实例
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os, sys
print "当前目录为: %s" %os.getcwd()
# 列出目录
print "目录为: %s"%os.listdir(os.getcwd())
# 重命名 "aa1.txt"
os.renames("aa1.txt","newdir/aanew.txt")
print "重命名成功。"
# 列出重命名的文件 "aa1.txt"
print "目录为: %s" %os.listdir(os.getcwd())
以上程序输出结果为:
当前目录为: /tmp
目录为:
[ 'a1.txt','resume.doc','a3.py','aa1.txt','Administrator','amrood.admin' ]
重命名成功。
目录为:
[ 'a1.txt','resume.doc','a3.py','Administrator','amrood.admin' ]
os.path.basename() 获取路径中的文件名
概述
os.path.basename() 方法用于返回文件路径中的文件名
语法
os.path.basename(path)
参数
- path -- 文件路径
返回值
文件名
实例:
import os
print( os.path.basename('/root/runoob.txt') ) # 返回文件名
以上程序输出结果为:
runoob.txt
os.path.dirname() 返回文件路径
概述
os.path.basename() 方法用于返回文件路径中的文件名
语法
os.path.dirname(path)
参数
- path -- 文件路径
返回值
文件所在的目录
实例:
import os
print( os.path.dirname('/root/runoob.txt') ) # 返回目录路径
以上程序输出结果为:
/root
os.path.split() 把路径分割成 dirname 和 basename,返回一个元组
概述
os.path.split() 方法把路径分割成 dirname 和 basename,返回一个元组
语法
os.path.split(path)
参数
- path -- 文件路径
返回值
dirname 和 basename,返回一个元组
实例:
import os
print( os.path.split('/root/runoob.txt') ) # 分割文件名与路径
以上程序输出结果为:
('/root', 'runoob.txt')
os.path.splitext()(返回 filename,extension)元组
os.path.join() 将目录和文件名合成一个路径
概述
os.path.join() 方法可以将目录和文件名合成一个路径
语法
os.path.join((path1[, path2[, ...]])
参数
- path -- 目录 文件名
返回值
合并后的文件路径
实例:
import os
print( os.path.join('root','test','runoob.txt') ) # 将目录和文件名合成一个路径
以上程序输出结果为:
root/test/runoob.txt
os.path.exists() 判断文件/文件夹是否存在
概述
os.path.exists() 方法可以直接判断文件/文件夹是否存在
语法
os.path.exists(path)
参数
- path -- 文件路径
返回值
如果路径 path 存在,返回 True;如果路径 path 不存在,返回 False
实例:
import os
print( os.path.exists('/root/runoob.txt') )
以上程序输出结果为:
True
os.path.getsize()返回文件大小
os.path.isabs()是否为绝对路径
os.path.isdir()是否为目录
os.path.isfile()是否为文件
来源:oschina
链接:https://my.oschina.net/u/3696975/blog/3158334