(十)Python:OS操作文件/目录

os 模块提供了非常丰富的方法用来处理文件和目录。

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。

#假定text.txt文件已存在,并且有读写权限
import os
ret = os.access("text.txt",os.F_OK)
print ("F_OK - 返回值 %s"% ret)
ret = os.access("text.txt",os.R_OK)
print ("R_OK - 返回值 %s"% ret)
ret = os.access("text.txt",os.W_OK)
print ("W_OK - 返回值 %s"% ret)
ret = os.access("text.txt",os.X_OK)
print ("X_OK - 返回值 %s"% ret)

结果:

F_OK - 返回值 True
R_OK - 返回值 True
W_OK - 返回值 True
X_OK - 返回值 False

os.chdir(path)

作用:改变当前工作目录到指定的路径。
参数:

  • path – 要切换到的新路径。

返回值:
如果允许访问返回 True , 否则返回False。

import os

path = r'F:\\Temp'
# 查看当前工作目录
retval = os.getcwd()
print ("修改前工作目录为 %s" % retval)
# 修改当前工作目录
ret=os.chdir( path )
# 查看修改后的工作目录
retval = os.getcwd()
print ("切换后 %s" % retval)

这里写图片描述

os.chflags(path, flags)

作用:用于设置路径的标记为数字标记,从而设置文件和目录的行为。多个标记可以使用 OR 来组合起来。Unix上可用。
参数:

  • path – 文件名路径或目录路径。
  • flags – 可以是以下值:
    • stat.UF_NODUMP: 非转储文件
    • stat.UF_IMMUTABLE: 文件是只读的
    • stat.UF_APPEND: 文件只能追加内容
    • stat.UF_NOUNLINK: 文件不可删除
    • stat.UF_OPAQUE: 目录不透明,需要通过联合堆栈查看
    • stat.SF_ARCHIVED: 可存档文件(超级用户可设)
    • stat.SF_IMMUTABLE: 文件是只读的(超级用户可设)
    • stat.SF_APPEND: 文件只能追加内容(超级用户可设)
    • stat.SF_NOUNLINK: 文件不可删除(超级用户可设)
    • stat.SF_SNAPSHOT: 快照文件(超级用户可设)
import os,stat

path = "text.txt"
# 为文件设置标记,使得它是只读的
flags = stat.UF_IMMUTABLE
os.chflags( path, flags )
os.open(file, flags[, mode])

作用:打开一个文件,并且设置需要的打开选项,mode参数是可选的。
参数:

  • file – 要打开的文件
  • flags – 该参数可以是以下选项,多个使用 “|” 隔开:
    • os.O_RDONLY: 以只读的方式打开
    • os.O_WRONLY: 以只写的方式打开
    • os.O_RDWR : 以读写的方式打开
    • os.O_NONBLOCK: 打开时不阻塞
    • os.O_APPEND: 以追加的方式打开
    • os.O_CREAT: 创建并打开一个新文件
    • os.O_TRUNC: 打开一个文件并截断它的长度为零(必须有写权限)
    • os.O_EXCL: 如果指定的文件存在,返回错误
    • os.O_SHLOCK: 自动获取共享锁
    • os.O_EXLOCK: 自动获取独立锁
    • os.O_DIRECT: 消除或减少缓存效果
    • os.O_FSYNC : 同步写入
    • os.O_NOFOLLOW: 不追踪软链接
  • mode —–用以下选项按位或操作生成, 目录的读权限表示可以获取目录里文件名列表, ,执行权限表示可以把工作目录切换到此目录 ,删除添加目录里的文件必须同时有写和执行权限 ,文件权限以用户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下取消只读
os.path.isdir(path)

判断当前文件是不是目录。

os.listdir(path)

列出当前目录下的所有文件列表

os.path.abspath(path)

获取父目录的绝对路径

os.path.join(path, *paths)

用于拼接路径。

os.remove(path)

删除指定路径的文件
参数:

  • path – 要删除的文件的路径
    如果指定的路径是一个目录,将抛出OSError。
os.rmdir(path)

用于删除指定路径的目录。仅当这文件夹是空的才可以, 否则, 抛出OSError。
参数:

  • path – 要删除的目录的路径
    这里写图片描述
os.removedirs(path)

递归删除目录。像rmdir(), 如果子文件夹成功删除, removedirs()才尝试它们的父文件夹,直到抛出一个error(说明你的文件夹不为空)
参数:

  • path – 要删除的目录的路径
    这里写图片描述
    我删除里面的文件后。
os.rename(src, dst)

命名文件或目录,从 src 到 dst,如果dst是一个存在的目录, 将抛出OSError。
参数:

  • src – 要修改的目录名
  • dst – 修改后的目录名
os.renames(old, new)

递归重命名目录或文件。类似rename()。
参数:

  • old – 要重命名的目录
  • new –文件或目录的新名字。甚至可以是包含在目录中的文件,或者完整的目录树。
练习:使用OS文件操作获取当前文件夹下所有的文件名
import os

def getFileName(parent, path="", deep=0):
    fileAbsPath = os.path.join(parent, path)
    if os.path.isdir(fileAbsPath) == True:#判断当前文件是否为文件夹
        if deep!=0:
            printLine(deep)
            print(path)
        for filename2 in os.listdir(fileAbsPath):#是文件夹,对其目录下面所有文件继续使用getFileName()函数
            getFileName(fileAbsPath, filename2, deep=deep + 1)
    else:
        printLine(deep)
        print(path)

#打印横线,使更美观
def printLine(deep):
    i = 1
    while i < deep:
        if i == 1:
            print("|-", end="")
        else:
            print("-", end="")
        i = i + 1

path = input("请输入你想浏览的目录:")
getFileName(path)
练习:使用OS文件操作批量修改目录下的文件名
import os

file_list=os.listdir("自己的目录")

for f in file_list:
    dest_file="re-"+f #重新命名之后的目标文件名
    parent_dir=os.path.abspath("自己的目录")#获得父目录的绝对路径 动态获取绝对路径
    #文件的绝对路径=父目录的绝对路径+/+文件名
    source_file=os.path.join(parent_dir,f)
    dest_file=os.path.join(parent_dir,dest_file)
    os.rename(source_file,dest_file)

猜你喜欢

转载自blog.csdn.net/qq_25343557/article/details/80033818