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

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. 【剑指Offer】面试题22. 链表中倒数第k个节点

    题目 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有6个节点,从头节点开始,它们的值依次是1.2.3.4.5.6. ...

  2. 【LeetCode】最长公共子序列

    [问题]给定两个字符串A和B,长度分别为m和n,要求找出它们最长的公共子串,并返回其长度.例如:A = "HelloWorld"B = "loop"则A与B的最 ...

  3. 通过SQL语句操作Sqlite数据库

    一.数据库的创建 数据库版本为1 //Ctrl+Shift+U:大写 public static final String DATABASE_NAME ="zzw.db"; pub ...

  4. Oracle学习笔记(2)

    2.Oracle用户管理 (1)创建用户:create user 用户名 identified by 密码(需要dba权限); sql>create user yzw identified by ...

  5. foreach —(遍历数组或循环中的字符,以获取信息)

    namespace ConsoleApplication2{ class Program {//letter 字母 gigit 数字 symbol 符号 static void Main(string ...

  6. 记校赛水题----AK爷兼职计

    Description AK爷最近收到一份兼职,是去幼儿园看小朋友,AK爷认为看孩子这件事情很简单,但是事实并非如此.幼儿园里的孩子们喜欢数学,不仅九九乘法口诀倒背如流而且精通各种算法.某天,AK爷上 ...

  7. Java算法练习——寻找两个有序数组的中位数

    题目链接 题目描述 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 $O(log(m + n))$. 你可以假设 nu ...

  8. mysql 杂

    mysql> show create table  table_name|view_name \G; 可以查看是视图还是表      \G 放到sql语句后,可以使每个字段打印到单独的行 1 I ...

  9. Ubuntu Kylin 14.04LTS 开机后卡在登陆界面,可以进入字符界面,或者登陆后鼠标不显示但是管用

    2014年4月27日,距离中期检查还有七天,基本上什么也没做,特别着急,雨已经下了快一天了,中午用美团外卖定的黄焖排骨,MD,什么玩意,那么一点点就18块钱,一看就不值五块钱,发誓再也不吃,最重要的是 ...

  10. 从 relu 的多种实现来看 torch.nn 与 torch.nn.functional 的区别与联系

    从 relu 的多种实现来看 torch.nn 与 torch.nn.functional 的区别与联系 relu多种实现之间的关系 relu 函数在 pytorch 中总共有 3 次出现: torc ...