第十二章 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)