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

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.路径、栈和队列、内存修改的更多相关文章

  1. Python笔记_第一篇_面向过程_第一部分_2.内存详解

    Python的很多教材中并没有讲内存方面的知识,但是内存的知识非常重要,对于计算机工作原理和方便理解编程语言是非常重要的,尤其是小白,因此需要把这一方面加上,能够更加深入的理解编程语言.这里引用了C语 ...

  2. 四、java基础-面向过程_对象_类中可出现的因素

    1.面向过程和面向对象区别: 1)面向过程:开发一个应用程序.一个项目,必须先了解整个过程,了解各个步骤.模块间的因果关系,使的面向过程方式去开发程序时,代码和代码之间的关联程度是非常强.所以其中任何 ...

  3. python自动化开发-[第五天]-面向过程、模块、包

    今日概要: 1.内置模块 2.协程函数 3.递归 4.面向过程编程与函数编程 5.模块 6.包 7.re正则 一.内置模块 1.匿名函数lambda 定义:匿名函数通常是创建了可以被调用的函数,它返回 ...

  4. python第四周迭代器生成器序列化面向过程递归

      第一节装饰器复习和知识储备------------ 第一节装饰器复习和知识储备------------ def wrapper(*args,**kwargs): index(*args,**kwa ...

  5. [Python笔记]第八篇:模块

    本篇主要内容:python常用模块用法介绍 什么是模块 模块,用一大段代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性 ...

  6. [Python笔记]第三篇:深浅拷贝、函数

    本篇主要内容:深浅拷贝,自定义函数,三目运算,lambda表达式, 深浅拷贝 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. import ...

  7. python之迭代器、生成器、面向过程编程

    一 迭代器 一 迭代的概念 #迭代器即迭代的工具,那什么是迭代呢?#迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单纯地重复,因而不 ...

  8. python函数之协程与面向过程编程

    第一:协程 初步了解协程 def eater(): print('start to eat') while True: food=yield print('is eating food:%s'%foo ...

  9. python怎么写可读性好的面向过程的长篇代码?

    最近接受老代码,mmp的,说是重新运行运行起来,那还不如重写呢,因为有很多毛病,不能直接运行,pep8就不用妄想奢望了,还有包括语法错误问题和内存严重泄露的问题(运行几分钟后python.exe进程达 ...

随机推荐

  1. UVA - 1606 Amphiphilic Carbon Molecules(两亲性分子)(扫描法)

    题意:平面上有n(n <= 1000)个点,每个点为白点或者黑点.现在需放置一条隔板,使得隔板一侧的白点数加上另一侧的黑点数总数最大.隔板上的点可以看做是在任意一侧. 分析:枚举每个基准点i,将 ...

  2. discuz伪静态问题(简单)

    提前声明一下我用的是宝塔面板.Linux系统.Nginx Web Server.经过一上午的摸索(我很菜了),终于在一个很无语的地方成功搞了伪静态1.2.点击查看当前的 Rewrite 规则3.我的是 ...

  3. ImportError: dynamic module does not define init function (initcaffe)

    https://github.com/BVLC/caffe/issues/2770 $ python2 -c "import caffe" Traceback (most rece ...

  4. ajax 跨域webapi 最简单的demo(只介绍Get)

    这几天遇到一个nodejs的项目,使用VSCode开发,需要连接数据库的,但是用nodejs连接数据库比较繁琐,需要安装很多东西,本人也懒得去研究了.后来想到建一个WebAPI然后用ajax来调用,避 ...

  5. String类型不属于八种基本类型

    String不属于8种基本数据类型,String是一个对象.因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性. new String( ...

  6. iOS内存管理布局及管理方案-理论篇

    苹果设备备受欢迎的背后离不开iOS优秀的内存管理机制,那iOS的内存布局及管理方案是怎样的呢?我们一起研究下. 内存管理分为五大块 栈区(stack):线性结构,内存连续,系统自己管理内存,程序运行记 ...

  7. c++程序—变量

    #include<iostream> using namespace std; int main() { int a = 10; cout << "a=" ...

  8. Git--git log

    参考 https://www.cnblogs.com/bellkosmos/p/5923439.html https://www.cnblogs.com/mkl34367803/p/9219913.h ...

  9. App基本界面组件案例

    今天的收获颇大呀,我发现了一个更高效快速的学习方法,如果真的是因为学习内容太多,无从下手的话,不妨去别人或者自己崇拜的大佬里的博客园里面转一转,你就会有意外的收获,不仅给你学习的压力,还更直观的给介绍 ...

  10. c++ 排序 冒泡 插入 选择 快速

    //冒泡 #include <iostream> using namespace std; void bubbleSort(int* list,int index) { ;i--) //i ...