Python笔记_第二篇_面向过程_第二部分_2.路径、栈和队列、内存修改

  这一部分分三个主题进行讲解,主要为后面的模块、包、第三方库的概念补充一些相关的内容。

1. 路径(Path)

  相对路径和绝对路径。

  举例1:我们先导入一个os库(模块)来观察一下路径

import os
# 绝对路径
print(os.path.abspath(".")) # 表示当前所处的文件夹的绝对路径
print(os.path.abspath("..")) # 表示当前所处的文件夹上一级文件夹的绝对路径
# 返回值:
# F:QUANT练习
# F:QUANT

# 相对路径:
open('aaa.txt')  
open('/data/bbb.txt')  

  其实从这里我们就一定很好理解了,绝对路径就是完整的一个路径表示方式,相对路径就是相对于绝对路径而言的路径。

  在这里其实我们发现我们已经用了import os这样一个模块的导入,这是后面要讲的内容,其实我们在之前的学习中用到了这种模式我们记住这个模式,然后用这个模块给的方法对路径进行详细的学习一下。

  备注:"." 点,这个概念在面向对象的学习中非常的重要。可以点方法可以点属性,何为方法属性我们在第三篇会进行讲解,在这里记录我们.是点一个动作出来即可。

  

  举例2:获取操作系统的类型:

# 获取操作系统的类型 nt--windows, posix--Linux、Unix, MAC OS X
print(os.name)
# 返回值:nt

  举例3:打印系统的详细信息

# 注意windows不支持,打印系统的详细信息
print(os.uname())

  举例4:获取系统的环境变量

# 获取操作系统的环境变量
print(os.environ)
# 返回值:
# environ({'内容略'})

  举例5:获取指定环境变量的路径

# 获取指定环境变量
print(os.environ.get("APPDATA"))
# 返回值:C:UsersThomasAppDataRoaming

  举例6:获取目录

# 获得当前目录
print(os.curdir)
# 返回值. 表示上一级

  举例7:获取当前工作目录,即当前Python脚步文件所在的目录

# 获取当前工作目录,即当前python脚本所在的目录
print(os.getcwd())
# 返回值:F:QUANT练习

  举例8:返回指定目录下的所有文件,以列表形式返回。重要

# 返回指定目录下的所有文件,以列表的形式返回
print(os.listdir(r"F:QUANT练习"))
# 返回值:
# ['.idea', '123.txt', 'eighth.py', 'fifth.py' ]

  举例9:在当前目录下创建新目录

# 在当前目录下创建新目录
# os.mkdir(r"F:QUANT练习kaige.txt")  # 绝对路径
# os.mkdir("kaige.txt")  # 相对路径

  举例10:删除当前目录下创建文件

# 删除当前目录下创建文件
# os.rmdir(r"F:QUANT练习kaige.txt")

  举例11:获取文件属性(stat = statement)

# 获取文件属性
print(os.stat("咏梅.txt"))
# 返回值:
# os.stat_result(st_mode=33206, st_ino=61924494876365353, st_dev=51093, st_nlink=1, st_uid=0, 
# st_gid=0, st_size=259, st_atime=1557125671, st_mtime=1557125671, st_ctime=1557125319)

  举例12:重命名

# 重命名
os.rename("咏梅","Thomas")

  举例13:删除普通文件

# 删除普通文件
os.remove("file1")

  举例14:运行shell命令

# 运行shell命令
# os.system("notepad")  # 记事本
# os.system("write") # 写字板
# os.system("mspaint") # 画图
# os.system("msconfig") # msconfig
# os.system("shutdown -s -t 500") # 定时关机
# os.system("shutdown -a") # 取消关机
# os.system("taskkill /f /im notepad.ext") # 关闭软件

  举例15:查看绝对路径

# 路径方法:
# 查看当前的绝对路径
print(os.path.abspath("./咏梅.txt"))

  举例16:拼接路径,重要

# 拼接路径
p1 = r"F:QUANT练习"
p2 = "sunck"  # 注意后面的路径前面不要有参数,或者加上r也可以
# p2 = r"sucnk"
print(os.path.join(p1,p2))
# 返回值:F:QUANT练习sunck

  举例17:拆分路径,重要

# 拆分路径
p3 = r"F:QUANT练习"
print(os.path.split(p3)) # 拆分成元组,把最后的文件名拆分
p4 = r"F:QUANT练习咏梅.txt"
print(os.path.splitext(p4)) # 拆分成元组,把最后的文件名拆分和扩展名
# 返回值:
# ('F:\QUANT', '练习')
# ('F:\QUANT\练习\咏梅', '.txt') # 包含一个扩展名,最后一个

  举例18:判断是否是目录、判断文件是否存在、判断目录中是否存在文件,重要

# 判断是否是目录
p5 = r"F:QUANT咏梅.txt"
print(os.path.isdir(p5))
# 判断文件是否存在
p6 = "咏梅.txt"  # 相对路径绝对路径
print(os.path.isfile(p6))

# 判断目录中是否存在文件
p7 = r"F:QUANT"
print(os.path.exists(p7))

  举例19:获取文件大小(字节)

# 获取文件大小(字节)
p8 = "咏梅.txt"
print(os.path.getsize(p8))
# 返回值:259

  举例20:获取文件目录、获取目录下的文件名

# 获取文件目录
p9 = r"F:QUANT咏梅.txt"
print(os.path.dirname(p9))
# 返回值:F:QUANT

# 获取目录下的文件名
p10 = r"F:QUANT咏梅.txt"
print(os.path.basename(p10))
# 返回值:咏梅.txt

2. 栈和队列

  关于栈这部分的详细解释参考第一篇的关于内存的详解,里面关于栈说的很清楚。  

  在之前接触栈的学习时候我们知道栈像是一个堵死的管道,只能后进来的先出去,这里我们引入了一个队列的概念,就是我们把这条管道打开,形成一个通路,这样我们就有了两个概念了。

  栈:先进后出,FILO

  队列:FIFO

  为什么要学习这部分内容,这部分主要是为了平时对于目录遍历和对存储数据文件操作常用的两种操作思路。

  2.1 模拟栈的结构(列表就是这么一个过程)

  举例21:模拟战栈的结构

# 模拟栈结构
stack = []

# 压栈(向栈里存数据)
stack.append("A")
print(stack)
stack.append("B")
print(stack)
stack.append("C")
print(stack)

# 出栈(在栈里取数据)
stack.pop()
print(stack)
stack.pop()
print(stack)
stack.pop()
print(stack)

# 返回值
# 压栈过程:
# ['A']
# ['A', 'B']
# ['A', 'B', 'C']

# 出栈过程
# ['A', 'B']
# ['A']
# []

  举例22:模拟队列的结构

# 模拟队列结构
import  collections
queue = collections.deque()
print(queue)

# 进队(存数据)
queue.append("A")
print(queue)
queue.append("B")
print(queue)
queue.append("C")
print(queue)

# 出队(取数据)
res1 = queue.popleft()
print("res1 = ",res1)
print(queue)
res2 = queue.popleft()
print("res2 = ",res2)
print(queue)
res3 = queue.popleft()
print("res3 = ",res3)
print(queue)

# 从这个过程我们看到了FIFO的过程
# 进队
# deque([])
# deque(['A'])
# deque(['A', 'B'])
# deque(['A', 'B', 'C'])

# 出队
# res1 =  A
# deque(['B', 'C'])
# res2 =  B
# deque(['C'])
# res3 =  C
# deque([])

  # 其实我们发现了queue.这个方法还有一个pop的方法,就是从右边弹出队列。因为我们现在模拟队列的先进先出的形式。记住这个即可。

3. 内存修改:(略)

原文地址:https://www.cnblogs.com/noah0532/p/10853278.html