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:\Users\Thomas\AppData\Roaming
举例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=, st_ino=, st_dev=, st_nlink=, st_uid=,
# st_gid=, st_size=, st_atime=, st_mtime=, st_ctime=)
举例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))
# 返回值:
举例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. 内存修改:(略)
Python笔记_第二篇_面向过程_第二部分_2.路径、栈和队列、内存修改的更多相关文章
- Python笔记_第一篇_面向过程_第一部分_2.内存详解
Python的很多教材中并没有讲内存方面的知识,但是内存的知识非常重要,对于计算机工作原理和方便理解编程语言是非常重要的,尤其是小白,因此需要把这一方面加上,能够更加深入的理解编程语言.这里引用了C语 ...
- 四、java基础-面向过程_对象_类中可出现的因素
1.面向过程和面向对象区别: 1)面向过程:开发一个应用程序.一个项目,必须先了解整个过程,了解各个步骤.模块间的因果关系,使的面向过程方式去开发程序时,代码和代码之间的关联程度是非常强.所以其中任何 ...
- python自动化开发-[第五天]-面向过程、模块、包
今日概要: 1.内置模块 2.协程函数 3.递归 4.面向过程编程与函数编程 5.模块 6.包 7.re正则 一.内置模块 1.匿名函数lambda 定义:匿名函数通常是创建了可以被调用的函数,它返回 ...
- python第四周迭代器生成器序列化面向过程递归
第一节装饰器复习和知识储备------------ 第一节装饰器复习和知识储备------------ def wrapper(*args,**kwargs): index(*args,**kwa ...
- [Python笔记]第八篇:模块
本篇主要内容:python常用模块用法介绍 什么是模块 模块,用一大段代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性 ...
- [Python笔记]第三篇:深浅拷贝、函数
本篇主要内容:深浅拷贝,自定义函数,三目运算,lambda表达式, 深浅拷贝 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. import ...
- python之迭代器、生成器、面向过程编程
一 迭代器 一 迭代的概念 #迭代器即迭代的工具,那什么是迭代呢?#迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单纯地重复,因而不 ...
- python函数之协程与面向过程编程
第一:协程 初步了解协程 def eater(): print('start to eat') while True: food=yield print('is eating food:%s'%foo ...
- python怎么写可读性好的面向过程的长篇代码?
最近接受老代码,mmp的,说是重新运行运行起来,那还不如重写呢,因为有很多毛病,不能直接运行,pep8就不用妄想奢望了,还有包括语法错误问题和内存严重泄露的问题(运行几分钟后python.exe进程达 ...
随机推荐
- Python量化交易的简单介绍
Python只是一门技术. 一.量化交易的发展 1.国外量化金融领域发展日趋成熟. 2.近几年量化交易在国内掀起热潮. 3.Python作为量化交易的编译语言. 二.什么是量化交易 1.利用计算机强大 ...
- MFC消息映射及消息处理函数原型
MFC把消息主要分为三大类: 1. 标准Windows消息(WM_XXX) 2. 命令消息(WM_COMMAND):凡由UI对象产生的消息都是这种命令消息,可能来自菜单或加速键或工具栏按钮. 3. 控 ...
- GIT-Linux(CentOS7)系统安装Git
GIT-Linux(CentOS7)系统安装Git 未成功 查看是否已安装了Git 发现Git版本已存在,说明已安装了Git [root@localhost ~]# rpm -qa|grep git ...
- 微服务基础——厉害了!API网关
微服务刚刚诞生的时候,人们将服务进行拆分,实现服务之间的松耦合,并且每个服务有专门的团队维护,然后客户端直接和各个子服务进行交互.比如,订单,商品,会员服务. 那么这种客户端直接和后端服务交互的方式会 ...
- 吴裕雄--天生自然TensorFlow2教程:填充与复制
import tensorflow as tf a = tf.reshape(tf.range(9), [3, 3]) a tf.pad(a, [[0, 0], [0, 0]]) tf.pad(a, ...
- C++ DirectShow读取摄像头后然后保存图像数据
#include <stdio.h> #include "camerads.h" #include <highgui.h> const char *g_sz ...
- VS2013的工程移植到VS2008
VS2013的工程完成后,用VS2008创建一个名称一样的工程(大小写也一样). 具体过程参考http://blog.csdn.net/sz76211822/article/details/42775 ...
- Lock wait timeout exceeded; try restarting transaction(mysql事务锁)
现场环境客户要求删数据(界面没法直接操作),于是直接在数据库进行查询删除了,删完发现界面依然能查到删除后的数据,又用sql语句进行删除,发现报了错:Lock wait timeout exceeded ...
- C++11多线程访问时候的数据保护实例
#include<iostream> #include<thread> #include<string> #include<vector> #inclu ...
- Python时间问题
获取当前的时间,time只能精确到秒,而datetime可以精确到毫秒,所以使用格式化的时候要注意. nowTime=time.localtime((time.time())) t=time.strf ...