第十二章 os模块使用

作者: 帅气的Lucky | 来源:发表于2019-04-01 12:54 被阅读0次

    OS模块

    包含了普遍的操作系统的功能

    一 函数

    os.name 获取操作系统类型nt->windows posix->Linux、Unix或Mac OS
    os.environ 获取操作系统中的所有环境变量
    os.environ.get("path") 获取指定环境变量
    os.curdir 获取当前目录
    os.getcwd() 获取当前工作目录,即当前python脚本所在的目录
    os.listdir(path) 以列表的形式返回指定目录下的所有的文件
    os.mkdir(path) 创建新目录
    os.rmdir(path) 删除目录
    os.stat(path) 获取文件属性
    os.rename(old, new) 重命名
    os.remove(filename) 删除普通文件
    os.system(cmmand) 运行shell命令 shutdown -s -f/ shutdown -a
    os.path.join(p1, p2) 将p1 p2连接成一个正确的路径
    os.path.splitext(path) 获取文件扩展名
    os.path.isdir(path) 判断是否是目录
    os.path.isfile(path) 判断文件是否存在
    os.path.exists(path) 判断目录是否存在
    os.path.getsize(path) 获得文件大小(字节)
    os.path.dirname(path) 获得路径的目录名
    os.path.basename(path) 获得路径的文件名
    os.path.abspath("./kaige") 查看当前的绝对路径
    os.path.split(C:\Users\xlg\Desktop\Python-1704) 拆分路径

    python删除一个非空文件夹竟然如此简单

    import shutil
    shutil.rmtree('c:\\test')
    

    递归遍历 统计大小

    import os
    # 递归 输出 所有的文件名
    path = r'C:\Users\xlg\Desktop\python安装文件'
    def myfile(path):
        sum = 0 # 文件大小初始化 为 0
        myfilelist = os.listdir(path) #返回当前文件夹下的所有的文件 和 目录
        for i in myfilelist: #遍历
            newpath = os.path.join(path,i) #将文件和路径拼凑在一起 形成一个新的完整的文件路径
            if os.path.isdir(newpath): #判断是否是 目录
                sum += myfile(newpath)  #如果是目录 就进去 继续统计
            if os.path.isfile(newpath):  #如果是文件 直接统计大小
                sum += os.path.getsize(newpath) #累加文件的大小
        return sum
    print(myfile(path))
    

    二 获取文件后缀:

    def getfile_fix(filename):
         return filename[filename.rfind('.')+1:]
    print(getfile_fix('runoob.txt'))
    
    
    方法二
    filename[-3:].upper()=='.PY'
    方法三
    #myList = x.split('.')
    #print(myList[len(myList)-1])
    

    三 检索指定路径下后缀是 py 的所有文件:

    import os
    import os.path
    
    #path = 'D:/UC/'
    ls = []
    
    def getAppointFile(path,ls):
        fileList = os.listdir(path)
        try:
            for tmp in fileList:
                pathTmp = os.path.join(path,tmp)
                if True==os.path.isdir(pathTmp):
                    getAppointFile(pathTmp,ls)
                elif pathTmp[pathTmp.rfind('.')+1:].upper()=='PY':
                    #相等filename[-3:].upper()=='.PY':   #不是目录,则比较后缀名
                    #myList = x.split('.')
                    #print(myList[len(myList)-1])
                    ls.append(pathTmp)
        except PermissionError:
            pass
    
    def main():
    
        while True:
            path = input('请输入路径:').strip()
            if os.path.isdir(path) == True:
                break
    
        getAppointFile(path,ls)
        #print(len(ls))
        print(ls)
        print(len(ls))
    
    main()
    
    
    
    import os
    import time
    
    def getSuffix(path,suffixList,searchSuffix):
        fileList = os.listdir(path)
        for file in fileList:
            #拼接新的路径
            newPath = os.path.join(path,file)
            #判断是否是目录 是的话递归
            if os.path.isdir(newPath):
                getSuffix(newPath,suffixList,searchSuffix)
                #判断是否是py后缀的文件
            # elif newPath[newPath.rfind('.')+1:].upper() == "PY":
            elif newPath[newPath.rfind('.')+1:].upper() == searchSuffix.upper():
                suffixList.append(file)
    def suffixShow(path,searchSuffix='py'):
        myList = []
        #path 当前查找数据的目录
        #myList 存储后缀数据的名字
        getSuffix(path,myList,searchSuffix)
        # print(myList)
        #判断是否有数据
        length = len(myList)
        #有数据进行显示
        if length:
            print("你所查找py后缀文件在{}目录下的个数为{} 这些文件都为...".format(path,length))
            time.sleep(2)
            for file in myList:
                print(file)
        else:
            print("在当前目录下 没有找到你要寻找后缀的文件")
    
    while True:
        searchDir = input("请输入你要查找的目录")
        searchSuffix = input("请输入你要查找的后缀 不输入默认为py")
        #判断目录是否存在
        if os.path.exists(searchDir):
            if searchSuffix:
                suffixShow(searchDir,searchSuffix)
            else:
                suffixShow(searchDir)
        else:
            print(searchDir,"不存在 请重新输入")
            time.sleep(2)
    

    四 列表 实现 栈的结构

    特点:先进后出
    #列表 实现 栈的结构
    mylist = []
    str1 = 'abcdefghijk'
    for i in str1:
        mylist.append(i)
    
    
    print(mylist.pop())
    print(mylist.pop())
    print(mylist)
    

    五 将列表当做堆栈使用

    ​ 列表方法使得列表可以很方便的作为一个堆栈来使用,堆栈作为特定的数据结构,最先进入的元素最后一个被释放(后进先出)。用 append() 方法可以把一个元素添加到堆栈顶。用不指定索引的 pop() 方法可以把一个元素从堆栈顶释放出来。例如

    stack = []
    stack.append(6)
    stack.append(7)
    print(stack)  #[6, 7]
    stack.pop()   #7
    print(stack)  #[6]
    stack.pop()   # 6
    print(stack)  #[]
    

    堆栈实现 获取文件下所有的文件名

    import os
    path = r'C:\Users\xlg\Desktop\python安装文件'm
    
    mylist = [] #创建 一个存储 目录的空列表
    mylist.append(path) #把路径添加进去
    while len(mylist) != 0: #判断我的目录列表是否为空
        mypath = mylist.pop() #将目录弹出来
        mylistdir = os.listdir(mypath) #获取该目录下的所有文件
        for filename in mylistdir: #把该目录下的文件 进行 遍历 逐个获取
            newpath = os.path.join(mypath,filename) #把每个文件 或者 目录 拼凑成一个完整的 路径
            if os.path.isdir(newpath): #判断是否是目录
                # print('目录名',filename)
                mylist.append(newpath) #是目录 就添加到 目录列表里
            else:
                print('文件名',filename) #是文件 就输出
    

    六 队列

    特点:先进先出
    collections中deque的使用
    deque是为了向list中删除和插入的效率更高,用法与list相似,而list自带的append和pop方法(尾部插入和删除)速度慢
    import collections #引入 其它的数据类型
    
    que = collections.deque() #使用队列
    mystr = 'abcdefg'
    for i in mystr:
        que.append(i)
    
    print(que.popleft())
    print(que)
    

    七 将列表当作队列使用

    ​ 也可以把列表当做队列用,只是在队列里第一加入的元素,第一个取出来(先进先出);但是拿列表用作这样的目的效率不高。在列表的最后添加或者弹出元素速度快,然而在列表里插入或者从头部弹出速度却不快(因为所有其他的元素都得一个一个地移动)。

    from collections import deque
    queue = deque(["Eric", "John", "Michael"])
    queue.append("Terry")           # Terry arrives
    queue.append("Graham")          # Graham arrives
    queue.popleft()                 # The first to arrive now leaves
    #'Eric'
    queue.popleft()                 # The second to arrive now leaves
    #'John'
    print(queue)                           # Remaining queue in order of arrival
    #deque(['Michael', 'Terry', 'Graham'])
    

    队列实现获取所有的文件名

    import collections
    import os
    path = r'C:\Users\xlg\Desktop\python安装文件'
    que = collections.deque()
    que.append(path)
    while len(que) != 0:
        mypath = que.popleft()
        mylist = os.listdir(mypath)
    
        for filename in mylist:
            newpath = os.path.join(mypath,filename)
            if os.path.isdir(newpath):
                que.append(newpath)
            else:
                print("文件名为",filename)
    

    八 递归删除 文件

    实例

    path = './a'
    import os
    
    def d(path):
        List = os.listdir(path)
        for i in List:
            newPath = os.path.join(path,i)
            if os.path.isdir(newPath):
                d(newPath)
            if os.path.isfile(newPath):
                os.remove(newPath)
        os.rmdir(path)
    d(path)
    

    相关文章

      网友评论

        本文标题:第十二章 os模块使用

        本文链接:https://www.haomeiwen.com/subject/krxvbqtx.html