打印目录内容,包括每个文件的大小和修改时间
为了简单 下面的版本 只打印条目名称 而不打印它们的完整路径
TypeError:print_dir_info()missing 1 required positional argument
重命名 移动 复制 删除文件
rename moved copy delett file
shutil模块 包括操作文件操作 shutil.move重命名一个函数
函数shutil.move重命名一个文件 将一个文件移动到另一个目录
shutil.move("old mail.txt","")
os.rename os重命名和移动文件的函数
os.rename可能并不能指定一个目录名称作为目标
不能将一个文件移动到林外一个磁盘或是文件系统
shutil copy函数 将一个文件 复制为具有一个新名称的文件 或是复制到一个新目录
delete 最简单的操作os.remove
os.move()
chown chmod 修改文件目录的权限
os.chmod(‘fileName‘,‘权限表示‘)
mkdir
os.mkdir()
创建空目录
os.mkdir()创建空目录时 父目录必须存在
mkdir -p
os.mkdir()
os.makedirs()递归创建目录树
os.rmdir()删除目录 删除空目录
os.rmdir
shutil.rmtree 可以在目录包含其他文件和子目录情况下将该目录删除
shutil.rmtree
通配globbingg 表示在文件名称模式中展开通配
模块glob中提供了名称glob函数 实现对目录内容进行通配功能
glob.glob函数接受模式作为输入
返回所有匹配文件名和路径名列表
通配和大小写区分
M*可以匹配名称以m M开头的所有文件 文件名称和文件一般不区分大小写
通配模式中可以使用的通配符
* 0个或是多个任意字符 一个也没有或是任意 *.m
? 任意单个字符 ???匹配恰好包含3个字符名称
[...] 方括号中列出的任意一个字符 [AEIOU]
[!..] 不在方括号出现的任意一个字符
方括号之间使用某个范围内的字符
[m-p] mnop 任意一个字母
[!0-9] 匹配数字以外的任意字符
匹配任意一个
?任意单个字符
* 0个或是多个字符
方括号
通配是为文件操作选择一组相似文件的较为便捷的方法
glob.glob("\\*.txt")
glob.glob("\\")
glob.glob()
python最具吸引力之处 在于它提供了广泛的内置函数和模块
python提供的标准模块以更好地理解他们
简单匿名函数
filter
简单匿名函数
需要简单的函数调用 告诉python创建一个函数并在适当的位置用它 而不是通过一个名称引用
lambda 接收列表并给予函数定义的标准移除元素
lambda filter 简单匿名函数
map 短路循环
列表中做出决策 列表解析
用来在列表解除引用操作符
x for x in everything if x % 2 == 0
循环迭代器
能够创建迭代器特殊属性
range
为循环生成迭代器
循环迭代器 step步长
数值间隔
创建一个包含要求所有元素数组 对序列中的全部元素进行检查 每个元素都要占用一些内存 range
避免大型列表出现问题
xrange
只在内存中创建列表的少量元素
range 不再创建列表 而是改为迭代器
xrange
检查range迭代器
range返回一个行为与列表类似的迭代器对象
指针 解除引用*
列表的 解除引用
xr = range(10) 直接调用不返回列表 生成一个对它调用方法的表示
生成一个对它调用方法的表示
通过同列表序列以及字典相同的解除引用解除引用操作符 来访问
列表 序列元组 字典相同的解除引用操作符[方括号]来访问
返回一个行为与列表类似的迭代器对象
行为与列表类似的迭代器对象
range生成一个没有任何方法的对象 没有任何公有方法 的对象
内置方法 能够像一个简单的序列那样使用
像简单序列使用
当使用方括号访问一个列表
本质 使用方括号访问一个列表 元组 字典告诉python要调用列表元组 字典__getitem__方法
range对象具有这个私有方法 可以像序列那样访问和解除引用
当调用range 它并不生成一个列表 而是告诉你它的生成方式
scheduler_default_filters=AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImageProp
os.fork立即调用os.execl运行其他的程序
os.execl是一个用新程序代替正在运行的程序的指令
执行某种类型的子任务 运行一个新程序以建立一个新的
使用os.fork进行系统调用 告诉计算机复制关于当前运行的程序的一切信息到一个新创建的单独程序 复制关于当前运行的程序
新创建的进程-子进程 os.fork中
返回值是新创建的进程在原始进程-父进程id
返回值是新创建的进程在原始进程
新创建的进程在原始进程中的进程
在调用os.fork之后最常做的一件事是立即调用os.execl运行其他程序
os.execl是一个用新程序代替正在运行的程序的指令
用新程序代替正在运行程序的指令 使得调用程序终止
启动一个新程序os.spawn
spawnl
spawnle
spawnlp
spawnlpe
spawnv
spawnve
spawnvp
spawnvpe
spawn 表示特定的情况
v表示传递 列表list vector 允许在不同的实例运行差别很大的命令
不需要对程序修改
l变量只需要简单的参数列表
使用e传递一个包括名称和值的字典作为新创建的程序环境
需要一个新命令最基本的调用 os.system()
正在运行一个程序并且只想等待结束 简单 使用函数
具体来说 当一个程序增长到很大fork 必须复制程序的全部信息到一个新程序
使用多个进程 子进程使用父进程数据创建 进程间共享使用很多数据
为了应付不适应子进程的
为了应付 一些不适应子进程复杂情况 不适应子进程 复杂情况
程序执行 很多合作的线程 可以同时存在于相同的程序
程序执行 很多合作的线程可以同时存在于相同的程序
合作的线程可以同时 存在于相同的程序
很多合作的线程可以同时存在于相同的程序
每个线程内部 都有不同对象,不同状态
都可以通信 彼此半独立
应用程序之间共享python代码的便捷方式
应用程序之间共享python代码便捷方式
模块是一个由python语句组成的文件
模块中可以定义函数和类 包含简单的可执行代码
模块
模块只是一个python源文件
包含变量类函数python脚步可用到的其他任何元素
dir函数 元素模块
将列出元素的所有属性
__builtins__ 内置函数 类 变量
列出元素 所有属性
导入python的某项目
from module import item;
为了导入一个模块 python解释器 首先查找一个module.pyy module是传递给import语句的模块名称
查找到该模块 python解释器将它编译成一个.pyc sys.path
python解释器查找模块搜索路径
sys.path 查找 解释器查找位置
创建一个具有函数的模块
python源文件
worth eating
包括函数属性 查看 一个 模块 导入 的 模块 的 属性 可以查看到 其中的函数属性
使用模块名前缀
大多数模块定义了一个相关的函数或类的集合
大多数 模块 定义了一个相关的函数和类的集合
类保存数据和操作 数据的方法
真正的面向对象编程(Object-oriented programming)
programming
programming
programming
object-oriented
object-oriented
oriented oriented
oriented
封装 继承 多态
封装 类能够隐藏执行某个任务 所需的内部细节和数据
类能够隐藏执行某个任务所需的内部细节和数据
类 保存需要的数据
正常情况下不支持查看数据
类隐藏执行某个任务所需要的内部细节和数据
类提供了一些对数据进行操作
类提供对数据的操作方法 能够隐藏内部细节
封装 是一种简化程序技巧
编写集中处理单个任务的代码
封装隐藏了复杂性
继承意味着类可以继承或访问父类中定义的数据和方法
继承意味着一个类可以继承或是访问父类
继承意味着类可以继承或访问父类定义的数据和方法
符合对一个问题领域进行分类的常识
矩形和圆都是形状
基类 可以是shapes
rectangle类
rectangle rectangle
rectanglee
shapes
circle 子类 成员
基类 编写通用代码
基类编写
基类 一般 子类 应该特殊
继承通常被称为特化
多态 -子类可以重写方法来完成更特殊的行为
子类可以重写方法 完成特殊的行为
完成模块包括 很多工作
定义应用于模块的错误和异常
模块的错误和异常
模块中药输出的项 模块的公共API
定义模块特定错误
标准的异常类
IOError
NotImplementedError
针对使用模块可能发生的特定问题定义异常
AngryChefException
一个xml解析异常也许应该
一个xml解析异常也许应该包括发生错误的行号
class SensitiveArtistExcdption(Exception):
artist sensitive sensitive
artist;
class angrychefexeption()
* 模块的全部公有方法
选择定义那些项能够导出公有方法
python解释器使用两种方法确定那些项公有
__all__解释器使用__all__确定那些项公有
解释器导入名称以下划线_开头的项目之外的所有项
简单创建文档字符串序列
每个字符串分别对应想要从模块导出的每个项的名称
meal 模块 __all__
__all__=[‘Meal‘,‘AngryChefException‘]
序列每个名称 从模块导出的类函数
help 显示模块的文档 任何python模块的文档
显示模块的文档 任何python模块的文档
包含执行模块功能的测试函数
执行模块功能的测试函数
测试应该创建模块实例 调用实例方法
任何包含python代码的文件都可以看做一个模块 可以运行一个模块
不希望模块自己运行python为模块定义了一个约定
模块自己运行 应该执行模块测试
if __name__ == ‘__main__‘:
test()
创建模块 建模
创建模块
一日三餐食物和 饮料 进行 建模
food and drinks
drinks
如何 组成 一个 模块
三种 机制 安装模块
dmg
创建python安装文件
distutils
distutils
distutils distribution utilities
分发实用程序 创建python安装文件
distribution utilits
setup.py
manifest manifest
应用
目录树各种文件进行简单搜索和处理
目录树中各种文件进行简单搜索 处理
文本处理
目录树文件简单搜索和处理 应用被称为文本处理
采用独立于平台的方法导航目录结构
文本处理的 找到目标文本
数据以结构化方式组织 数据以结构化方式组织 数据库
数据库具有完善的索引 和数据存储功能
如果知道希望寻找什么样的内容数据资源包含的信息完全不是有序和规整的
文本处理领域 目录导航 正则表达式 神奇
目录导航 不同操作系统真正给简单的程序带来麻烦的领域
unix windows mac 以不同方式组织目录
不同的字符分割子目录
提供系列跨平台工具执行目录和路径操作
正则表达式是指定一个非常简单的文本解析器方法
对任意多行文本进行处理
提取有用数据
192.168.2.0/24 有线 3层交换ip pool
192.168.0.0/24
导航文件系统
许多不同平台执行日常任务
os os.path
c:\a\f\f
/e/e/r/root/home
目录函数的基本坐标
os.getcwd() 可以将这个函数看做任何语言、
返回一个存储在指定的directory文件名和子目录列表
os.stat()
os.getcwd pwd
pwd
os.listdir()
数值元组 元组给出任何可能需要的关于文件(目录)信息
inode stat
st_mode
文件的模式 访问权限
access modify 创建时间create cttime
mtime
将路径分割为符合当前操作系统的组成名称 返回元组 不是列表
将路径分割为符合当前操作系统组成名称
将路径分割为符合当前操作系统的组成名称
符合 当前操作系统的路径
os.path.join(components)
normcase 规范化路径大小写 文件名 区分大小写
windows 操作系统比较文件名的时候忽略大小写
os.path.normcase()
os.walk(top,topdown = True,onerror = None,followlinks = False)
自上而下 自低而上 迭代 目录树
创建一个由dirpath,dirnames filenames
如果要用程序进行处理 拆分成目录路径元组
join连接回去
os.stat(‘.‘)
搜索特殊类型文件
基于找到的结构改进脚步
找到程序的新用法 添加新的 功能 展示 os.walk 函数
文件系统迭代的所有繁重工作
unexpected EOF while parsing
特殊字符使模式匹配更有意义 特殊字符 一般的通配符
.匹配字符串中的任何一个字符
指定原生字符串
需要处理的字符串
filter(lambda ss:re.match(r‘xxx‘,ss),ss);
se = filter((lambda to-be-string: re.match(r‘将被匹配的字符串‘,ss)),ss)
函数 的 返回值 是 filter 类的 数据 类型
如何只匹配句点
原始字符
c = filter((lambda s: re.search(r‘x.x‘,s)),ss)
* 0个 多个
. 任意一个方括号 表示匹配特殊字符串
.*任意多个;
asert断言 assert断言
单元测试 测试 套件
软件开发周期的早期就准备测试
早期捕捉到错误
不一定经过证明 但是自己相信是真实的事项
断言是代码中使用的语句
开发时 用于测试代码的有效性 如歌语言 结果 不为真
引发AssertionError
如果错误没被捕捉 程序将会停止
AssertionError
断言 if raise 组合
raise异常
激活断言变量__debug__特殊变量
python -O 对代码进行优化 意味着除了执行其他优化处理 执行其他优化处理 删除断言
断言 测试会使程序运行缓慢
options
优化 optimize
optimize
optimize
部署程序 删除被认为是开发阶段特性的断言
加入断言捕捉错误
测试用例运行的环境 testcase 测试装置test fixture
创建component 标签 label tag
命令按钮 cmdexit coommand button order button
单选按钮 radio button option button 复选 按钮 check button
radio button option button
radio option button
check button;
布局图形用户界面
定制小组件外观
创建自定义对话框
填充顺序
Tkinter创建GUI小组件
大多数GUI框架 基于一个小组件widget 模型 小组件是GUI的一个组件 按钮 标签和文本框 小组件
有些小组件只是用来容纳其他小组件并将他们布局到屏幕
table 框架
GUI是对若干小组件进行布局
myfirstgui 简单窗口 和标签
标签 简单 解释 就是在一张纸 上 写 一个 标示 标示 某种 信息 ;
小组件Label创建对象
不完成任何操作
脚本不处理任何GUI事件
窗口底部 并将其拉伸
用Tkinter创建GUI小组件
大多数GUI框架 基于小组件 部件widget 模型 部件是gui的部件 按钮button label 文本框 textbox
都是小组件 -- 部件 大多数部件在屏幕都有图形显示
有些小组件只是用来容纳其他小组件并将他们布局到屏幕
GUI是对若干小组件进行布局构成
Tkinter 编写一个实际的GUI应用程序
简单的窗口标签GUI
import tkinter
from tkiner import *
widget = Label(None,text = ‘This is my first Gui!!‘)
widget.pack()
widget.mainloop()
导入tkinter模块 从Tkinter导入Label类
从Tkinter导入所有类 为每个部件-小组件创建对象
widget.pack 将标签 l父窗口 将部件abel 布局到
import tkinter
from tkinter import *
Label(text = ‘My first GUI!‘).pack(expand = YES,fill = BOTH)
Label(text = ‘first GUI!‘).pack(expand = YES,fill = BOTH)
mainloop()
创建带有文本的标签
父窗口扩展小组件也扩展
配置部件 ---小组件 选项
标签 指派文本 配置部件 选项
expand fill = BOTH
expand = YES 扩展 填充;
配置组件 部件
创建相同的父窗口 标签
不是在创建他们的同 设置选项 等到他们创建之后再进行设置;
使用小组件
如何创建基本的标签
如何格式化小组件
成功的程序 不仅仅良好的外观 实现实际的操作
gui添加多部件
部件执行操作
使用程序对用户的各种操作做出反应
创建标签部件
button
import sys
from tkinter import *
widget = Button(None,text = ‘Click Me‘,command = sys.exit)
widget.pack()
widget.mainloop()
改变组件类型添加退出程序以外的选项窗口添加第二个小组件
创建布局
考虑各个部件间层次结构很重要
层次结构一般称为父子关系
前面示例创建很多部件
导入的是模块
导入 模块 里面的 类 下的 函数 及方法
cleass mode
def
tkinter-模块.Button-类.pack-方法;
控制部件外观 appearance
facade
aspect
guise
exterior;
控制部件外观
窗体 forms activeX windows
创建在视觉上吸引人的程序