Python基础语法09 os模块 栈与队列 第三方模块

导入os模块
import os

os.getcwd()
功能:查看当前目录所在路径

os.listdir(path)
功能:查看指定路径下所有的文件以及目录的名字

目录:文件夹
文件:文件

绝对路径:
在window中以盘符的开头的,我们就称它为绝对路径
在mac或者linux以"/"开头的我们称之为绝对路径
相对路径:
以.开头或者以…开头的,或者以文件或者目录开头的,我们都称之为相对路径
以.开头/文件/目录,相对于当前目录
以…开头的,相对于上一级目录

os.path.abspath(path)
功能:完成了一个路径拼接,将相对路径path拼接到当前目录下,并不查询文件是否存在。

os.path.split(path)
功能:将path进行切分,返回目录的部分以及文件的部分。
注意:此功能不会判断文件是否存在,或者是是否为目录或者文件。

os.path.join(path,paths)
功能:将path与paths进行拼接处理,注意当paths中出现绝对路径的时候,
则不会保留之前的路径,直接返回后面的绝对路径

os.path.dirname(path)
功能:返回path路径目录的部分

os.path.basename(path)
功能:返回path路径文件的部分

os.path.getsize(path)
功能:统计指定路径的文件的大小,注意若为目录则无法统计,若路径不对则报错。

os.path.exists(path)
功能:判断路径是否存在,若存在则返回True,否则返回False

os.path.isdir(path)
功能:判断指定的路径是否为目录,若是则返回True,否则返回返回False

os.path.isfile(path)
功能:判断指定的路径是否为文件,若是则返回True,否则返回False

os.remove(path)
功能:删除指定路径的文件

os.mkdir(path)
功能:创建指指定路径的目录,只能创建单个目录

os.makedirs()
功能:递归创建空目录

os.chdir(path)
功能:切换到指定的路径下

os.removedirs(path)
功能:递归删除多层空目录

os.chdir(r"/Users/zhangjiao/PycharmProjects/szpython1903/day04")
print(os.listdir())

os.mkdir(“basedir”)

os.makedirs(“basedir/a/b”)

os.remove(“basedir/a/b/11”)

os.rmdir(“basedir”)

os.removedirs(“basedir/a/b”)

print(os.getcwd())

path = r"/Users/zhangjiao/PycharmProjects/szpython1904"
path2 = r"/Users/zhangjiao/PycharmProjects/szpython1903/"
path3 = r"."
path4 = r"…"
path5 =r"/Users/zhangjiao/PycharmProjects/szpython1903/day02"
path6 = r"/Users/zhangjiao/PycharmProjects/szpython1903/day09/1.作业.py"

print(os.path.isfile(path))
print(os.path.isfile(path2))
print(os.path.isfile(path3))
print(os.path.isfile(path4))
print(os.path.isfile(path5))
print(os.path.isfile(path6))
print("*“50)
print(os.path.isdir(path))
print(os.path.isdir(path2))
print(os.path.isdir(path3))
print(os.path.isdir(path4))
print(os.path.isdir(path5))
print(os.path.isdir(path6))
print("
”*50)

print(os.path.exists(path))
print(os.path.exists(path2))
print(os.path.exists(path3))
print(os.path.exists(path4))

print(os.path.getsize(path))

print(os.path.getsize(path5))

print(os.path.getsize(path6))

print("*“50)
print(os.path.dirname(path))
print(os.path.dirname(path2))
print(os.path.dirname(path3))
print(os.path.dirname(path4))
print("
”*50)
print(os.path.basename(path))
print(os.path.basename(path2))
print(os.path.basename(path3))
print(os.path.basename(path4))

print(os.listdir())

print(os.listdir(path))

print(os.path.abspath("./hello.py"))

print(os.path.abspath("…/hello.py"))

print(os.path.split(path))

print(os.path.split(path2))

print(os.path.split(path3))

print(os.path.split(path4))

print(os.path.join(path,“hello.py”))

print(os.path.join(path,"…/hello.py"))

print(os.path.join(path,"/hello.py"))

递归遍历目录
函数功能:
实现列举指定路径下所有的目录名以及文件名。
‘’’
import os

def getalldir(path):
# 列举根目录下所有的文件以及目录
fileList = os.listdir(path)
# 遍历目录以及文件
for filename in fileList:
#获取绝对路径
absPath = os.path.join(path,filename)
#若是目录
if os.path.isdir(absPath):
print(“目录”,filename)
# 列举指定目录下的所有的文件以及目录
getalldir(absPath)
else:
print(“文件”,filename)

path = r"D:\Python1903\pythonjichu\szpython1903" #文件路径
getalldir(path)

栈:递归遍历目录

在python中没有栈数据类型,使用列表模仿的栈结构
栈结构的特点:
先进后出

#定义栈
mystack = []

入栈

mystack.append(1)
mystack.append(2)
mystack.append(3)

出栈

print(mystack.pop())

print(mystack.pop())

#print(mystack.pop())

使用栈结构遍历目录:
1.创建一个栈
2.将根目录入栈
3.判断栈是否为空
4.将栈中的元素出栈
5.列举下面的文件以及目录
6.获取它的绝对路径
7.判断它是否为目录,若是目录,入栈处理
8.不是目录直接输出。
写成函数

import os

def stackgetdir(path):
# 创建一个栈
mystack = []
#将根目录入栈
mystack.append(path)
# 判断栈是否为空
# print(mystack)
while mystack:
# 将栈中的路径出栈
filePath = mystack.pop()
# 拿到根路径下所有的文件名以及目录名
fileList = os.listdir(filePath)
print(fileList)
# 遍历目录列表
for filename in fileList:
# 获取到绝对路径
abspath = os.path.join(filePath,filename)
# 判断该文件是否为目录
if os.path.isdir(abspath):
print(“目录”,filename)
# 若为目录,则进行入栈处理
mystack.append(abspath)
else:
print(“文件”,filename)

path = r"D:\Python1903\pythonjichu\szpython1903"
stackgetdir(path)

队列:
特点:先进先出

import collections

创建一个队列

queue = collections.deque()

入队

queue.append(1)
queue.append(2)
queue.append(3)

出队

print(queue.pop())

print(queue.popleft())
print(queue.popleft())
print(queue.popleft())

使用队列这种遍历方式我们称之为广度遍历,
使用栈的这种遍历方式,我们称之为深度遍历。

import collections

创建一个队列

queue = collections.deque()

使用队列结构遍历目录:
1.创建一个队列
2.将根目录入队
3.判断队列是否为空
4.将队列中的元素出队
5.列举下面的文件以及目录
6.获取它的绝对路径
7.判断它是否为目录,若是目录,入队处理
8.不是目录直接输出。
写成函数

import os

def queuegetdir(path):
#创建一个队列
# queue = collections.deque()
queue = []
# 根目录入队
queue.append(path)
while queue:
# 出队
# filepath = queue.popleft()
filepath = queue.pop(0)
# 列举路径下所有的文件以及目录
fileList = os.listdir(filepath)
print(fileList)
#遍历文件
for filename in fileList:
#获取绝对路径
absPath = os.path.join(filepath,filename)
# 判断该路径是否为目录
if os.path.isdir(absPath):
print(“目录”,filename)
# 若是目录则入队
queue.append(absPath)
else:
print(“文件”,filename)

path = r"D:\Python1903\pythonjichu\szpython1903"
queuegetdir(path)

在python中一个.py文件就是一个模块。

模块的优点:
1.提高代码的复用性
2.提高代码的可维护性
3.可以引入其他模块【内置模块,第三方模块,自定义模块】
4.避免函数名以及变量名的冲突

模块划分:
1.自定义模块:需要自己定义,使用的时候需要导入
2.内置模块:无需定义,无需安装,直接导入即可使用
3.第三方模块:无需定义,需要安装,使用的时候需要导入

导入模块的方式,来引入其他模块中的函数或者变量
导入方式:
方式一:整体引入
import 模块1,模块2,…,模块n
一次性导入多个模块
函数的调用:
模块名.函数名(参数列表)
变量的调用
模块名.变量名

import 模块名 as 别名
当模块名过长的时候我们可以使用as给它设置一个别名,调用的时候使用别名调用即可
函数的调用:
别名.函数名(参数列表)
别名.变量名

方式二:局部引入
from 模块名 import 函数名,类名,变量
函数的调用:
函数名(参数列表)
变量的调用:
变量
使用局部导入的方式可以方便我们函数以及变量的调用,
但是要注意函数名以及变量名的冲突。

方式三:使用*引入

from 模块名 import *
意思:将模块中所有的函数,类以及变量全部导入进来
函数调用:
函数名(参数列表)
变量的调用
变量名
注意:不建议使用,容易引发函数名以及变量名的冲突。

全局引入与局部引入的区别:
1.调用方式不同
全局引入:要通过模块名来进行调用
局部引入:直接调用
2.引入的范围不同
全局引入:整个模块中的变量以及函数都可以使用
局部引入:只能使用导入的函数以及变量。

import os,collections,time

import day09.demo as demo

import collections

from collections import deque

deque()

from day09.demo import myprint,height

from day09.demo import *

demo.myprint()

print(demo.height)

def myprint():

print(“you are very good!!!”)

myprint()

myprint()

print(height)

sys模块:
import sys

‘’’
sys.argv
获取正在执行的命令行参数的列表
‘’’
print(sys.argv)

‘’’
sys.path
python从第三方模块中查询的内建规则
‘’’
print(sys.path)
‘’’
sys.platform
获取当前正在执行的平台信息
‘’’
print(sys.platform)

name的属性:

当模块被导入到其他模块的时候,会出现这样的问题:该模块执行的函数在引入的时候会自动执行,
为了解决这个问题,我们可以使用__name__属性,
__name__是一个内置变量,当该模块在自身执行的时候,name__的值为__main,
当该模块被其他模块引入的时候,__name__的值为该模块的模块名。
因此我们通常情况下在模块中会添加这么一个判断
if name == “main”:
pass
来解决这个问题。
通常情况下,在项目开发的过程中,我们也会使用它作为整个程序的入口。

包:

作用:解决模块名冲突的问题,
包的创建:普通的目录中,添加一个__init__.py文件,则其就为一个包。
注意只要顶级的包不发生冲突【不重名】,其他的包名或者模块名即使重名也不会发生冲突。

import day09.a.demo as demo1
import day09.b.demo as demo2

from day09.a.demo import myprint

from day09.b.demo import myprint

demo1.myprint()
demo2.myprint()

myprint()

安装第三发模块:

pip install 模块名
pip uninstall 模块名
pip -V 查看版本信息
pip list 查看所有的包
pip freeze 查看自己安装的包

from PIL import Image
im = Image.open(“D:/1.jpg”)
print(im.format,im.size)
im.thumbnail((100,100))
im.save(“demo.jpg”)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值