跟着lucky老师学Python

第十二章 os模块使用

2019-04-01  本文已影响0人  帅气的Lucky

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)
上一篇下一篇

猜你喜欢

热点阅读