OS模块补充


常用内置模块

一、OS模块补充

查看当前目录的绝对路径
os.path.abspath('.')
os.path.abspath('./')
os.getcwd()

拼接路径
path=os.path.join(os.path.abspath('./'),'test')
print(path)#D:\Python\PythonProject\004模块\test

os.path.split:拆分路径:把一个路径拆分为两部分,后一部分总是最后级别的目录或文件名
ret=os.path.split('D:\Python\PythonProject\\004模块')
print(ret)#('D:\\Python\\PythonProject', '004模块')

os.path.splitext:得到文件扩展名
ret=os.path.splitext('D:\Python\PythonProject\\004模块\\book.txt')
print(ret)#('D:\\Python\\PythonProject\\004模块\\book', '.txt')

利用Python的特性来过滤文件
#os.listdir('.'):获取当前目录下的所有子目录或子文件
获取当前目录下的子目录
ret=[x for x in os.listdir('.') if os.path.isdir(x)]
print(ret)
#['back', 'bask', 'book', 'test2', '__pycache__']

获取当前目录下所有的.py文件
ret=[x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.py']
print(ret)
#['014模块.py', '015常用内置模块.py', '016操作文件和目录.py', 'utils.py', '__init__.py']

os文件操作题

  • 1.编写一个程序,能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串”b”的文件,并打印出相对路径。
def search_file(path):
    name_lst=[x for x in os.listdir(path) if 'b' in x]
    for name in name_lst:
        print(name)
        abs_path=os.path.join(path,name)
        if os.path.isfile(abs_path):
            if 'b' in abs_path:
                print(name)
        elif os.path.isdir(abs_path):
            search_file(abs_path)
search_file('D:\Python_html\PythonProject\\004模块')
  • 2.获取当前文件夹中所有文件名字(支持获取无限层级下的文件名字)
import os
def search_file(path):
    pathList=os.listdir(path)
    for name in pathList:
        pathName=os.path.join(path,name)
        if os.path.isdir(pathName):
            print(pathName)
            search_file(pathName)
        else:
            print(pathName)
search_file(r'D:\Python_html\PythonProject\004模块')
  • 3.删除一个不为空,且有多个子文件夹的文件夹(提示:要想删除文件夹必须保证文件夹是空的,如果不为空还得删除里面的文件)
path=r'D:\Python_html\PythonProject\004模块\back'
def remove(path):
    pathList=os.listdir(path)
    for name in pathList:
        pathName=os.path.join(path,name)
        if os.path.isdir(pathName):
            remove(pathName)
        else:
            os.remove(pathName)
    os.rmdir(path)
remove(path)

shutil模块

shutil.copyfile( src, dst) 从源src复制到dst中去。当然前提是目标地址是具备可写权限。抛出的异常信息为IOException. 如果当前的dst已存在的话就会被覆盖掉
shutil.move( src, dst) 移动文件或重命名

shutil.copymode( src, dst) 只是会复制其权限其他的东西是不会被复制的
shutil.copystat( src, dst) 复制权限、最后访问时间、最后修改时间

shutil.copy( src, dst) 复制一个文件到一个文件或一个目录
shutil.copy2( src, dst) 在copy上的基础上再复制文件最后访问时间与修改时间也复制过来了,类似于cp –p的东西
shutil.copy2( src, dst) 如果两个位置的文件系统是一样的话相当于是rename操作,只是改名;如果是不在相同的文件系统的话就是做move操作
shutil.copytree( olddir, newdir, True/Flase) 把olddir拷贝一份newdir,如果第3个参数是True,则复制目录时将保持文件夹下的符号连接,如果第3个参数是False,则将在复制的目录下生成物理副本来替代符号连接
shutil.rmtree( src ) 递归删除一个目录以及目录内的所有内容