python是一种面向对象的解释型语言
Python 配置 在环境变量Path中添加安装目录,以及Script目录(使用pip命令)
Python2to3,将安装目录下的tools\script里面的2to3拷贝到需要转换的文件夹目录下,使用命令cmd进入该文件夹,然后调入代码
D:\python\Tools\scripts 调用2to3
python 2to3.py -w 文件名.py
python文件打包成.exe文件,使用pyinstaller模块命令pyinstaller -F 路径名
python注释
python单行注释 # 快捷键alt+3添加注释 alt+4取消注释 缩进快捷键为ctrl+],取消为ctrl+[
多行注释为 ‘’‘ ’‘’
中文注释 # coding:编码方法
python使用的是代码缩进的方式,不使用{ } 进行代码块的限定,代码块使用:开始。末尾不建议添加;超过一行的用小括号括起来。import导入文档每行导入一个。
and | as | assert | break | class | continue | def | del | elif | else |
except | finally | for | from | False | global | if | import | in | is |
lambda | nonlocal | not | None | or | pass | raise | return | try | True |
while | with | yield |
以单下划线开头的表示符表示不能直接访问的类属性 _
以双下划线开头的标识符表示类的私有属性 __
以双下划线开头和结尾的是Python里专有的标识, __init__()
python不需要定义变量,变量之间可以互相传值
数学类型分为整数,浮点数,复数 python数值自动转换为高精度计算,
字符串类型可以使用‘’‘三引号,前后的字符串引号必须一致,r或R“” 将原样输出字符串
数据类型字符型,数值型,布尔型都是python的基本数据类型
数值类型包括整数,浮点数,复数
数据类型转换
函数 | 作用 |
int(x) | 将X转换成整数类型 |
float(x) | 将X转换成浮点数类型 |
complex(real[,imag]) | 创建一个复数 |
str(x) | 将x转换为字符串 |
repr(x) | 将x转换为表达式字符串 |
eval(str) | 计算在字符串中的有效Python表达式,并返回一个对象 |
chr(x) | 将整数x转换为一个字符 |
ord(x) | 将一个字符x转换为它对应的整数值 |
hex(x) | 将一个整数x转换为一个十六进制的字符串 |
oct(x) | 将一个整数x转换为一个八进制的字符串 |
没有定义,没有固定类型说明的语言,在输出时需要添加转换函数,只有超过储存精度时才进行给高精度转换。整数除以整数可以得到小数,与其余语言不一样
与C或者Java对比
运算符基本一样,多了//表示为求商,**表示幂的操作
赋值运算符同样多了//=和**=
比较运算符一样 > >= < <= != == 但不支持++或--等一元运算符
%求余只与后一个数字的符号有关
而逻辑运算符使用的是 and or not 这点和ASP相似 而不是使用&&、||、!=等C或Java等语言
位与有0即0 位或有1即1 位反0变1,1变0 位异两值不相同时为1
input函数 左边为输入赋值变量,括号里面为输入提示 a=input("")
print函数为输出函数,可输出字符串或者变量,但只能输出一种类型,python2和python3在一行输出时不一样,python3会添加括号,字符串会使用单引号括起来,并且字符串和变量可以使用逗号间隔如print("abc",a,"def")
文件的输出,ftp=open(r'D:\text.txt','a+')
print("输出的内容",file=ftp)
ftp.close()
控制语句
if……:elif……:else:同一代码块缩进量相同,行尾有:
单行if else 前值为true值执行的代码,else为false执行的代码 a if 3>0 else b
python没有switch语句,没有do……while
但同一变量前后可以比较 如3
range(start,end,step) 生成一系列整数,必须有一个参数,有一个参数时为end,两个为start,end,省略start则从0开始
python在循环中想不换行输出则添加逗号,python3需要添加end='分隔符'
for 迭代变量 in 对象 抽出对象中的第一个值依次进行迭代,满足条件就执行代码,直到结束为止,对象可以是range生成的数,或者字符串
pass为空语句,不执行操作
凡是字母等都需要引号,数字不需要
序列分为:列表、元组、集合、字典、字符串。其中集合和字典不支持索引、切片、相加、相乘等操作
索引:可以是0到n-1或者从后面开始进行索引,-1为后面的第一个元素
切片:序列名[start:end:step],可省略某个参数
相加:两个序列组合在一起,类型可以不一样
相乘:序列原有排序方式的重复
内置函数in:检查某个元素是否为序列的成员 可以not in检查是否不在一个序列
内置函数len(序列名):序列的长度
内置函数max(序列名):序列的最大值
内置函数min(序列 名):序列的最小值
函数 | 作用 |
list() | 将序列转换为列表 |
str() | 将序列转换为字符串 |
sum() | 计算元素和 |
sorted() | 对元素进行排序 |
reversed() | 反向序列中的元素 |
enumerate() | 将序列组合为一个索引序列,多用在for循环中 |
使用sorted函数进行排序时,第一个参数是列表名称,第三个参数为升降序排列reverse=False/True,当围殴True时降序,默认为升序排列
key=lambda x:(x1,x2)设置排序的规则,对于二维列表x1,x2代表每一个列表的第二或者第三个元素
列表(list)
不同类型的任何内容都可以组合成列表
列表操作:
列表推导式list=[Expression for var in range/oldlist] Expression 根据序列添加到不同项 for in 循环条件,添加个数 list=[Expression for var in list 或者 list=[Expression for var in list if condition]
二维列表为列表元素时一个列表,类似与二维数组
元组(tuple)
元组和和列表类似,由一系列按特定顺序排列的元素组成,不能改变顺序
元组使用的是()小括号或者不使用括号,而列表使用的是中括号[ ]。当只有一个元素时,需要添加逗号,否则会当成一个数值或字符串等,空元组empty=()
tuple(seq) 将列表转换为元组 tuple1 = tuple(rang(2,21,2)
元组与序列的区别 元组不能修改元素 可作为字典的键,速度较快 使用的是小括号 列表可以使用insert remove pop append等修改函数.元组和列表都支持索引,切片等无损访问操作.
元组不能单独修改某一个元素,因此需要修改元素需要重新为变量赋值a=(11,21,33),对某值修改.a=(11,21,31)
元组推导式和列表相同,只是中括号换成小括号,其中元组生成的是生成器对象,一旦调用,对象消失,而列表生成的不会.因此需要及时使用tuple将遍历转化成元组.
元组可以使用+将两个元组连接成一个新的元组,只能是相同类型才能相加,如不能将元组与序列相加,序列也不能和元组相加,至于元组和元组相加的类型,可以是字符串和数值相加等.
字典(dict)
键值对,键必须时唯一的,但值不必,键值对之间使用冒号进行分割,使用大括号将所有元素括起来
字典的修改可以通过键的方式值
创建
使用zip将序列转换成元组
name = ['绮梦','冷伊一','香凝','黛兰'] sign = ['水瓶座','射手座','双鱼座','双子座']
dictionary =dict(zip(name,sign)) 组合成元组,返回一个zip对象
可以使用lis(zip(name,sign))或者tuple(zip(name,sign))将其转换成特定的序列
dictname=dict(((tuple1,tuple2),(tuple3,tuple4)))将元组转换成字典,注意里面的格式是元组的格式
dictname=dict(key=value,...)将变量转换为字典的形式
dictname=dict.fromkeys(list)创建一个只有键没有值的字典,返回的是{key1:None,...}
访问
字典对象的pop()方法返回指定键并删除
popitem()方法返回并删除字典中的元素
字典对象dictname.get()方法返回指定键的值 dictname.get(key[,default]) default默认值,不写则返回none,用于查无此键时返回
dictname.items()返回键值对元组列表 ,for循环一个参数时返回(key,value),如for item in dictname.items()
for循环两个参数时,可以分别代表key和value 如for keys , item in dictname.items()
字典推导式dictname={key:value for i in range()}或者 dictname ={key:value for key,value in zip(list1,list2)
集合(可变集合set,不可变集合frozenset),
无序不重复的元素集合,创建空集合必须使用set函数set(),使用{}
修改
setname.add(只能是字符串,布尔型,数值等非可迭代元素,不能是列表,元组等)
使用del setname 删除整个集合 setname.clear()清空集合 setname.pop()随机删除一个元素并返回或者setname.remove()函数删除指定元素
集合的交集&,并集|,差集(减去A集合中在B集合出现的元素)-运算,对称差集^(删除在A,B中一起出现的元素)
数据结构 | 是否可变 | 是否重复 | 是否序列 | 定义符号 | 支持索引,切片,相加,相乘 |
列表(list) | 可变 | 可重复 | 有序 | [] | 支持 |
元组(tuple) | 不可变 | 可重复 | 有序 | () | 支持 |
字典(dict) | 可变 | 可重复 | 无序 | {key:value} | 不支持 |
集合(set) | 可变 | 不可重复 | 无序 | {} | 不支持 |
字符串
字符串使用+进行相加 如果不是两个字符串相加+,则需要转换格式
使用len(strname.encode()) #UTF8编码 //len(strname.encode("gbk")) 获取字符串的长度
通过索引或者切片的方式获取指定的字符串, ''' '''单三引号或者双三引号都代表着可以跨行输出,并且是对应的符号,即左边使用什么开始就以什么符号结束如' "......." ,....'三引号消除了特殊字符输出时需要转义的烦恼,但转义字符不会原样输出,如可直接输出<>,但不能输出原样\n~会进行转义输出,输出换行
str.split("分隔符",次数)使用分割符进行分割字符串,可以省略,省略第一值时第二值也应该省略
string.join(可迭代序列) string可以是一个字符或者一个字符串 如:@.join(listname)
str.count(sub,start,end) 统计出现的次数 str为原字符串,sub是字符串参数,以下str与sub的表示意义一样
str.endswith(sub,start,end)判断是否以某个字符串或字符结尾
str.find(sub,start,end)判断元素是否在字符串内,在就现实出现位置,不在返回-1
str.index(sub,start,end)判断元素出现的位置,在就显示位置,不在会报错
str.lower(),转换成小写
str.upper(),转换成大写
str.strip([chars]),去除两边的空格,指定时去除以上出现的字符,可以是多个字符,不指定时去除默认的字符(空格符,回车符,换行符,制表符),同样有lstrip和rstrip两个方法,
item in string,同样可以用与判断元素是否在字符串内
字符串内置函数有很多个,这些不一一列出,有兴趣可参考相关的文件
字符串 print("",end='')表示输出后不换行
字符串格式输出print("aaa%sbbb" %('a and b')),输出时不能使用逗号进行分割,与C语言有区别,前面格式表达,后面是一个元组的形式
str1="人生"
str2="苦短"
str3=","
str4="我用pyhthon."
print("%s%s%s" %(str1,str2,str3),str4) #人生苦短, 我用pyhthon.格式化输出字符串,使用逗号进行分割时会添加空格
print("%s%s%s" %(str1,str2,str3)+str4) #人生苦短,我用pyhthon.每个字符输出分开a=3.1415926
print("圆周率=%.2f" %a) #格式化输出浮点
格式化输出
'%[-][+][0][m][.n] 格式化字符' %exp
格式化字符 | 说明 | 格式化字符 | 说明 |
%s | 字符串(采用str()显示 | %r | 字符串(采用repr()显示.原样输出如\n不代表换行输出 |
%c | 单个字符 | %o | 八进制整数 |
%d或者%i | 十进制整数 | %e | 指数(基底写为e) |
%x | 十六进制整数 | %E | 指数(基底写为E) |
%f或者%F | 浮点数 | %% | 字符% |
使用对象方法string=str.format() 返回一个字符串类型的数据,format是需要转换的对象,如temp='我的名字:{:s}' temp.format("Mr liang")
format对象使用是如果指定了index索引下标,可以多个索引下标对应一个元素
格式化字符 | 说明 | 格式化字符 | 说明 |
s | 对字符串类型格式化 | b | 将十进制整数自动转换成二进制表示再格式化 |
d | 十进制整数 | o | 将十进制整数自动转换成八进制表示格式化 |
c | 将十进制整数转换成对应的Unicode字符 | x或者X | 将十进制整数自动转换成十六进制表示再格式化 |
e或者E | 转换为科学计数法表示再格式化 | f或者F | 转换为浮点数(默认小数点后保留6位)再格式化 |
g或者G | 自动再e和f或者E和F中切换 | % | 显示百分比(默认显示小数点后6位) |
字符编码str.encode([encoding="utf-8"][,errors="strict"])其中如果只有一个参数时可简写成str.encode("utf-8"),后一个参数表示错误处理方式,其中有四个可选参数,strict是遇到错误,抛出异常.ignore是遇到错误不处理.replace是用?替代错误字符.xmlcharrefreplace是xml的字符引用,默认是strict
字符解码str.decode([encode="utf-8"][,error="strict"],解码与编码是一个互逆的运算,不一致会抛出异常,并不是出现乱码
正则表达式
行定位符,判断所选的字符是在行的位置,从而进行匹配 ^str表示匹配行首以str开头的字符串,str$表示行尾以str结尾的字符串
元字符
限定符都是以前一个字符前面的一个为准:
? | 匹配前面的字符零次或一次 | colou?r:匹配colour和color |
+ | 匹配前面的字符一次或多次 | go+gle:匹配的范围从gogle到goo...gle |
* | 匹配前面的字符零次或多次 | go*gle:匹配的范围从ggle到goo...gle |
{n} | 匹配前面的字符n次 | go{2}gle:只匹配google |
{n,} | 匹配前面的字符最少n次 | go{2,}gle:匹配的范围从google到goo...gle |
{n,m} | 匹配前面的字符最少n次,最多m次 | employe{0,2}:匹配employ/employe和employee |
字符类,匹配以字符串作为限定的字符串类型
[字符集合]
排除字符 不匹配字符串中的字符
选择字符,符合这个条件或者是另一个条件
转义字符,匹配特殊需要转义的字符,如\^,\.等在正则表达式中存在意义的字符
分组(),将一组正则表达式看成一个整体
re 模块实现正则表达式
re.match(pattern,string,[flags]) pattern是个正则表达式的字符串,string是需要匹配的字符串,flag控制方式re.l不区分字母的大小写 re.A让\w不匹配汉字.match是在从一开始判断是否符合正则表达式
re对象的start()方法判断正则表达式索引的起始位置,end()判断结束位置,使用group()方法返回一个匹配成功的字符串
re.search(pattern,string,[flags])在整个字符串中寻找,如果找到则停止寻找
re.findall(pattern,string,[flags])返回一个列表的形式,保存找到的所有结果,如果找不到则为空列表
re.sub(pattern,rep,string,count[,flags]),查找替换,其中参数依次是正则表达式格式,替换的字符,查找的原字符,替换次数(忽略为全部替换),匹配控制
re.split(pattern,string,[maxsplit][,flags]) 查找拆分,其中参数为正则表达式,原字符串,最大拆分次数,匹配控制
函数
定义函数 def 函数名称(参数列表)
调用函数 函数名称(实际参数),函数参数个数与类型必须与形式参数一致,但如果使用形式参数作为进行传参时可以不需要按照特定的顺序如下面的代码,这是一种关键字定义的函数
- def addab(a,b): #定义相加函数
- return a+b
- addab(b=10,a=5) #调用函数
另外还可以在形式参数设定时指定默认的值,并且只能是参数列表的最后一个值.函数名.__default__查看默认值
可变参数列表def 函数名(*元素) 调用函数是可以像普通方法一样传入参数,也可以像这样 函数名(*列表)
参数列表如果定义为(**),则传入的是一个字典格式的参数序列
参数如果返回多个值时,返回的形式是一种元组的形式,索引值与返回的时的顺序相对应
函数体内定义一个已有的全局变量 global
匿名函数 返回名称 = lambda 形参:结构块 然后使用返回名称()进行调用
类
创建类的实例和函数的返回形式一样,不使用new关键字
class Geese: #定义类
pass
geese1=Geese() #创建类的实例
__init__(必须有一个参数,默认为self)创建类的构造方法,但创建对象时不需要传入指定的参数一样可以创建对象,并且默认会调用构造方法,构造方法只能有一个,后面创建的方法会替代前面的方法
定义成员方法 def 函数名(self,可选参数) 同样定义函数方法需要传入一个self的参数,其为默认值,但添加其他参数时依然起作用
访问成员变量,无论是否是在其类中定义的变量,都需要带上一个类名进行访问
python中的类成员属性共享同一个变量,通过类名或者实例名进行访问,与java有所不同,但java可以通过static进行控制,python需要定义实例属性,通过构造方法中的实例对象进行访问
class Goose :
goose=1
def __init__(self) :
self.goose=2
print(Goose.goose) #访问类属性
print(self.goose) #访问实例属性
goose=Goose()
访问权限 _foo只允许类及子类进行访问,可以使用类名加上变量名或者实例名加上变量名进行访问,其中foo代表变量名
__foo只允许本类进行访问,访问时类名加上变量名,实例对象不能直接访问,但可以通过实例名._类名__变量名进行访问
私有属性不能通过实例进行修改
@property
将函数转换为一个属性值,在调用函数时可以省略()
访问类属性可以使用类名进行访问,也可以使用实例对象进行访问.但访问实例属性不能通过类名进行访问,只能通过实例名进行访问
模块
import modulename [as alias] 导入模块并可以使用as 添加别名
使用import导入时会自动创建命名空间,因此需要不添加新的命名空间时,可以使用from modelname import member
当导入两个模块名称时需要添加命名空间
搜索目录
主程序__name__=__main__ 每一个模块的执行都会创建一个变量为__name__的文件,当文件在当前状态被调用时名字为__main__,否则则是文件名
包
创建包,就是创建一个文件夹,在文件夹中包含一个命名为__init__.py的文件,该文件可以是空,当调入包时会执行该文件中的代码
使用包1.import 包名.模块名 2.from 包名 import 模块名 3.from 包名.模块名 import 定义名
模块名 | 描述 |
sys | 与Python解释器及环境操作相关的标准库 |
time | 提供与时间相关的各种函数的标准库 |
os | 提供了访问操作系统功能的标准库 |
calendar | 提供与日期相关的各种函数的标准库 |
urllib | 用于读取来自网上(服务器上)的数据的标准库 |
json | 用于使用JSON序列化和反序列化对象 |
re | 用于在字符串中执行正则表达式匹配和替换 |
math | 提供算术运算函数的标准库 |
decimal | 用于进行精度控制运算精度,有效位数和四舍五入操作的十进制运算 |
shutil | 用于进行高级文件操作,如复制,移动和重命名等 |
logging | 提供了灵活的记录事件,错误,警告和调试信息等日志信息的功能 |
tkinter | 使用Python进行GUI编程的标准库 |
python的chm文件在Doc目录下
pip
其中command命令可以是install安装,uninstall卸载,list等,安装和卸载必须添加模块名
help('modules')查看机器的模块
pip list 查看第三方模块
异常
异常 | 描述 |
NameError | 尝试访问一个没有声明的变量引起的错误 |
IndexError | 索引超出序列范围引起的错误 |
IndentainError | 缩进错误 |
ValueErroe | 传入的值错误 |
Key Error | 请求一个不存在的字典关键字引起的错误 |
IOError | 输入输出错误(如要读取的文件不存在) |
ImportError | 当import语句无法找到模块或from无法在模块中找到相应的名称时引发的错误 |
TypeError | 类型不合适引发的错误 |
MemoryError | 内存不足 |
Attribute Error | 尝试访问未知的对象属性引发的错误 |
ZeroDivisionError | 除数为0引发的错误 |
try ... except ... 捕获异常,try后面添加可能出现异常的执行代码,except捕获获得的异常进行处理,可以是多个或者是一个,多个时并行处理.
1.try ... except ... else else添加不出错时执行的代码 2.try ...except ...finally ... finally 语句无论是否出错都执行代码
调试
IDLE中调试命令,使用run中的菜单python shell打开窗口,然后使用菜单的debug按钮下的debugger(打开的是Debug Control窗口)进行调试,然后选择file open打开文件, 使用鼠标右键添加断点
其中debug control窗口中的按钮分别是go--用于执行调至断点操作.step--进入要执行的函数,over--单步执行,out--跳出所在函数,quit--表示结束调试
assert语句调试程序, assert expression[,reason] expression表达式,如果为真,什么都不做,如果为假,则抛出AssertionError异常. reason语句是可选参数,用于对判断条件进行描述 在使用assert语法调试时可以在执行时正在非调试下进行 python -O 文件名.py进行非调试操作
文件
file = open (filename [,mode[,buffering]]) 第一个文件表示文件的名字,第二个文件的参数如下标,第三个参数表示是否进行缓存,1表示缓存(默认)0表示不缓存,大于1代表缓存的大小.对于第二个参数,r代表读,w代表写,a代表追加,+表示双向读写,b代表二进制的模式
还可以市file=open(filename[,mode][,encode=""])根据文件的编码形式读取或者写入信息
值 | 说明 | 注意 |
r | 以只读模式打开文件,文件的指针将会在文件的开头 | 文件必须存在 |
rb | 以二进制格式打开文件,并且采用只读模式.文件的指针将会放在文件的开头,一般用于非文本文件,如图片,声音等 | |
r+ | 打开文件后,可以读取文件内容,也可以写入新的内容覆盖原有内容(从文件开头进行覆盖) | |
rb+ | 以二进制格式打开文读写件,并且采用读写模式.文件的指针将会放在文件的开头.一般用于非文本文件,如图片,声音等 | |
w | 以只写模式打开文件 | 文件存在,则将其覆盖,否则创建新文件 |
wb | 以二进制格式打开文件,并且采用只写模式.一般用于非文本文件,如图片,声音等 | |
w+ | 打开文件后,先清空原有内容,使其变为一个空的文件,对这个空文件有读写权限 | |
wb+ | 以二进制格式打开文件,并且采用读写模式.一般用于非文本文件,如图片,声音等 | |
a | 以追加模式打开一个文件.如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于写入 | |
ab | 以二进制格式打开文件,并且采用追加模式.如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于写入 | |
a+ | 以读写模式打开文件.如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于读写 | |
ab+ | 以二进制格式打开文件,并且采用追加模式.如果该文件已经存在,文件指针将放在文件的末尾(即新内容会被写入到已有内容之后),否则,创建新文件用于读写 |
关闭文件file.close() file.closed()判断是否关闭文件
file.seek(offset[,whence])将指针移动,对于不同编码的文件,file.read()都是按照1个字符读取,无论是英文还是中文都是一个,而seek是按照编码的形式进行计算,如果中文占两个字节,那么seek移动时参数n=2将移动一个中文的间隔,whence代表指针出发位置,默认为0,1代表当前位置,2代表末尾
立即输出缓冲区的内容file.flush()
file.readline()读取一行的文本,file.readlines()读取全部文本,返回的是一个字符串列表的形式.而file.read(n)根据n的数目读取个数,也可以不指定而读取所有信息
with 参数 as 文件指针可以不用关闭文件的操作 with open("文件名","打开方式",...) as file 对于已经读取的信息,如果再次读取会显示空
目录操作
import导入os模块
使用os.name查看操作系统名字 os.linesep查看换行符 os.sep查看路径分隔符
函数 | 说明 |
getcwd() | 返回当前的工作目录 |
listdir(path) | 返回指定路径下的文件和目录信息 |
mkdir(path[,mode]) | 创建目录 |
makedirs(path1/path2...[,mode] | 创建多级目录(文件夹下还包含其余文件夹) |
rmdir(path) | 删除目录(只能是空文件夹) |
removedirs(path1/path2...) | 删除多级目录 |
chdir(path) | 把path设置为当前工作目录 |
walk(top[,topdown[,onerror]]) | 遍历目录树,该方法返回一个元组,包括所有路径名,所有目录列表和文件列表3个元素 |
函数 | 说明 |
abspath(path) | 用于获取文件或目录的绝对路径 |
exists(path) | 用于判断目录或者文件是否存在,如果存在则返回True,否则返回False |
join(path) | 将目录与目录或者文件名拼接起来 |
splitext() | 分离文件名和扩展名 |
basename(path) | 从一个目录中提取文件名 |
dirname(path) | 从一个路径中提取文件路径,不包括文件名 |
isdir(path) | 用于判断是否为有效路径 |
注意区分是什么模块提供的函数,我们在使用时仅仅调用os模块,os.path模块是其子模块
删除一个非空文件夹是可以调用import模块 shutil的retree("路径名")
函数 | 说明 |
access(path,accessmode) | 获取对文件是否有指定的访问权限(读取/写入/执行权限).accessmode的值为R_OK(读取),W_OK(写入),X_OK(执行)或F_OK(存在).如果有指定的权限,则返回1,否则返回0 |
chmod(path,mode) | 修改path指定文件的访问权限 |
remove(path) | 删除path指定的文件路径 |
rename(src,dst) | 将文件或目录src冲命名为dst |
stat(path) | 返回path指定文件的信息,返回的是一个对象 |
statfile(path[,operation]) | 使用关联的应用程序打开path指定的文件 |
属性 | 说明 | 属性 | 说明 |
st_mode | 保护模式 | st_dev | 设别名 |
st_ino | 索引名 | st_uid | 用户ID |
st_nlink | 硬链接号(被连接数目) | st_gid | 组ID |
st_size | 文件大小,单位为字节 | st_atime | 最后一次访问时间 |
st_mtime | 最后一次修改时间 | st_ctime | 最后一次状态变化的时间(系统不同返回的结果也不同,例如,在Windows操作系f下返回的是文件的创建时间) |
import os # 导入os模块
def formatTime(longtime):
'''格式化日期时间的函数
longtime:要格式化的时间
'''
import time # 导入时间模块
return time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(longtime))
def formatByte(number):
'''格式化日期时间的函数
number:要格式化的字节数
'''
for (scale,label) in [(1024*1024*1024,"GB"),(1024*1024,"MB"),(1024,"KB")]:
if number>= scale: # 如果文件大小大于等于1KB
return "%.2f %s" %(number*1.0/scale,label)
elif number == 1: # 如果文件大小为1字节
return "1 字节"
else: # 处理小于1KB的情况
byte = "%.2f" % (number or 0)
return (byte[:-3] if byte.endswith('.00') else byte)+" 字节" # 去掉结尾的.00,并且加上单位“字节”
if __name__ == '__main__':
fileinfo = os.stat("mr.png") # 获取文件的基本信息
print("文件完整路径:", os.path.abspath("mr.png")) # 获取文件的完整数路径
# 输出文件的基本信息
print("索引号:",fileinfo.st_ino)
print("设备名:",fileinfo.st_dev)
print("文件大小:",formatByte(fileinfo.st_size))
print("最后一次访问时间:",formatTime(fileinfo.st_atime))
print("最后一次修改时间:",formatTime(fileinfo.st_mtime))
print("最后一次状态变化时间:",formatTime(fileinfo.st_ctime))
操作数据库需要用到两个对象,一个是连接对象connection ,另一个是cursor对象
连接对象的创建conn=pymysql.connect(host=' ',user=' ',password=' ',host=' ',database=' ',charset=' ',cursorclass=' ')
conn=pymysql.connect(host='localhost',user='user',password='passwd',db='test',charset='utf-8',cursorclass=pymysql.cursor.DictCursor)
方法名 | 说明 |
close() | 关闭数据库连接 |
commit() | 提交事务 |
rollback() | 回滚事务 |
cursor() | 获取游标对象,操作数据库,如执行DML操作,调用存储过程等 |
工具包 | 描述 |
wxPython | wxPython是Python语言的一套优秀的GUI图形库,允许Python程序员很方便地创建完整的,功能健全的GUI用户界面 |
Kivy | Kivy是一个开源工具包能够让使用相同源代码创建的程序能跨平台运行它主要关注创新型用户界面开发,如多点触摸应用程序 |
Flexx | Flexx是一个纯Python工具包,用来创建图形化界面应用程序,可使用Web技术进行界面的渲染 |
PyQt | PyQt是Qt库的Python版本,支持跨平台,Qt框架的源代码是使用C++编写的 |
Tkinter | Tkinter(也叫Tk接口)是Tk图形用户界面工具包标准的Python接口.Tk是一个轻量级的跨平台图形用户界面(GUI)开发工具,因此会功能不齐全 |
Pywin32 | windows Pywin32允许你像VC一样的形式来使用Python开发win32应用 |
PyGTK | PyGTK让你用Python轻松创建具有图形用户界面的程序 |
pyui4win | pyui4win是一个开源的采用自绘技术的界面库 |
cmd命名中安装wxPython pip install -U wxPython
pip install -i https://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com wxpython
由于上一条是连接国外的网站,可能会连接超时,因此可以使用下面的命令访问豆瓣IO镜像进行安装,在最末尾添加需要的模块名
命令的使用是在cmd窗口中直接输入,如果出现pip不是有效的命名,则参考最开始时配置系统环境变量的方法,推荐使用豆瓣IO方法
使用GUI时需要创建两个对象,一个是应用程序对象wx.App,另一个是顶级窗口对象wx.Frame
##直接使用wx.APP
##导入模块
import wx
##初始化
app=wx.App()
##设置顶级窗口
frame=wx.Frame(None,title="Hello")
##显示窗口
frame.Show()
##调用主循环方法
app.MainLoop()
##创建子类使用wx.APP
import wx
class App(wx.App) :
def OnInit(self) :
frame=wx.Frame(None,title="Hello")
frame.Show()
app=App()
app.MainLoop()
框架wx.Frame(parent,id=-1,title="",pos=wx.DefaultPosition,size=wx.DefaultSize,style=wx.DEFAULT_FRAME_STYLE,name="frame")
- parent:框架的父级窗口.如果是顶级窗口,这个值为None
- id:关于新窗口的wxPythonID号.通常设为-1,让wxPython自动生成一个新的ID
- title:窗口的标题
- pos:一个wx.Point对象,它指定这个窗口的左上角在屏幕中的位置.在图形用户界面程序中,通常(0,0)是显示器的左上角,这个默认值(-1,-1)将让系统决定窗口的位置
- size:一个wx.Size对象,它指定这个窗口的初始尺寸.这个默认值(-1,-1)将让系统决定窗口的初始尺寸
- style:指定窗口的类型的常量.可以使用或运算来组合它们
- name:框架内在的名字.可以使用它来寻找这个窗口
文本框StatcText(parent,id=-1,label="",pos=wx.DefaultPosition,size=wx.DefaultSize,style=0,name="staticText")
设置字体wx.Font
frame.setFont(wx.Font(pointSize,family,style,weight,underline=False,facename="",encoding=wx.FONTENCODING_DEFAULT))
- pointSize:字体的整数尺寸,单位为磅
- family:用于快速指定一个字体而不需要知道该字体的实际的名字
- style:指明字体是否倾斜
- weight:指明字体的醒目程度
- underline:仅在windows系统下有效,如果取值为True,则加下划线,如果未False则无下划线.
- faceName:指定字体名
- encoding:允许在几个编码中选择一个,大多数情况可以使用默认编码
wx.TextCtrl(parent,id=-1,value="",pos=wx.DefaultPosition,size=wx.DefaultSize,style=0,validator=wx.DefaultValidator name=wx.TextCtrlNameStr)
- value:显示在控件中的初始文本
- validator:用于过滤数据以确保只能键入要接受的数据
- style的取值
style:
- wx.TE_CENTER:控件中的文本居中
- wx.TE_LEFT:控件中的文本左对齐
- wx.TE_NOHIDESEL:文本始终高亮显示,只适用于windows
- wx.TE_PASSWORD:不显示所键入的文本,以*号代替
- wx.TE_READONLY:文本控件为只读,用户不能修改其中的文本
- wx.TE_RIGHT:控件中的文本右对齐
- wx.TE_PROCESS_ENTER:如果使用该参数,那么当用户在控件内按下
键时,一个文本输入事件将被触发.否则,按键事件由该文本控件或该对话框管理 - wx.TE_PROCESS_TAB:如果指定了这个样式,那么通常的字符事件在按下
键时创建(一般意味一个制表符将被插入文本),否则,tab由对话框来管理,通常时控件间的切换
布局文件
sizer名称 | 描述 |
BoxSizer | 在一条水平或垂直线上的窗口部件的布局.当尺寸改变时,控制窗口控件的行为上很灵活.通常用于嵌套的样式,可用于几乎任何类型的布局 |
GridSizer | 一个十分基础的网格布局.当你要放置的窗口部件都是同样尺寸且整齐地放入一个规则的网格中可以使用它 |
FlexGridSizer | 对GridSizer稍微做了些改变,当窗口部件有不同尺寸时,可以有更好的结果 |
GridBagSizer | GirdSizer系列中最灵活的成员,使得网格中的窗口部件可以随意放置 |
StaticBoxSizer | 一个标准的Box Sizer.带有标题和环线 |
Add(control,proportion,flag,border)
绑定事件
bt_button.Bind(wx.EVT_BUTTON,OnclickSubmit)
EVT_BUTTON为鼠标按键事件,该参数可以为其他触发事件项,OnclickSubmit为方法名
实例代码
# -*- coding:utf-8 -*-
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, id):
wx.Frame.__init__(self, parent, id, '用户登录', size=(400, 300))
# 创建面板
panel = wx.Panel(self)
# 创建“确定”和“取消”按钮,并绑定事件
self.bt_confirm = wx.Button(panel, label='确定')
self.bt_confirm.Bind(wx.EVT_BUTTON,self.OnclickSubmit)
self.bt_cancel = wx.Button(panel, label='取消')
self.bt_cancel.Bind(wx.EVT_BUTTON,self.OnclickCancel)
# 创建文本,左对齐
self.title = wx.StaticText(panel, label="请输入用户名和密码")
self.label_user = wx.StaticText(panel, label="用户名:")
self.text_user = wx.TextCtrl(panel, style=wx.TE_LEFT)
self.label_pwd = wx.StaticText(panel, label="密 码:")
self.text_password = wx.TextCtrl(panel, style=wx.TE_PASSWORD)
# 添加容器,容器中控件按横向并排排列
hsizer_user = wx.BoxSizer(wx.HORIZONTAL)
hsizer_user.Add(self.label_user, proportion=0, flag=wx.ALL, border=5)
hsizer_user.Add(self.text_user, proportion=1, flag=wx.ALL, border=5)
hsizer_pwd = wx.BoxSizer(wx.HORIZONTAL)
hsizer_pwd.Add(self.label_pwd, proportion=0, flag=wx.ALL, border=5)
hsizer_pwd.Add(self.text_password, proportion=1, flag=wx.ALL, border=5)
hsizer_button = wx.BoxSizer(wx.HORIZONTAL)
hsizer_button.Add(self.bt_confirm, proportion=0, flag=wx.ALIGN_CENTER, border=5)
hsizer_button.Add(self.bt_cancel, proportion=0, flag=wx.ALIGN_CENTER, border=5)
# 添加容器,容器中控件按纵向并排排列
vsizer_all = wx.BoxSizer(wx.VERTICAL)
vsizer_all.Add(self.title, proportion=0, flag=wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER,
border=15)
vsizer_all.Add(hsizer_user, proportion=0, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=45)
vsizer_all.Add(hsizer_pwd, proportion=0, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=45)
vsizer_all.Add(hsizer_button, proportion=0, flag=wx.ALIGN_CENTER | wx.TOP, border=15)
panel.SetSizer(vsizer_all)
def OnclickSubmit(self,event):
""" 点击确定按钮,执行方法 """
message = ""
username = self.text_user.GetValue() # 获取输入的用户名
password = self.text_password.GetValue() # 获取输入的密码
if username == "" or password == "" : # 判断用户名或密码是否为空
message = '用户名或密码不能为空'
elif username =='mr' and password =='mrsoft': # 用户名和密码正确
message = '登录成功'
else:
message = '用户名和密码不匹配' # 用户名或密码错误
wx.MessageBox(message) # 弹出提示框
def OnclickCancel(self,event):
""" 点击取消按钮,执行方法 """
self.text_user.SetValue("") # 清空输入的用户名
self.text_password.SetValue("") # 清空输入的密码
if __name__ == '__main__':
app = wx.App() # 初始化
frame = MyFrame(parent=None,id=-1) # 实例MyFrame类,并传递参数
frame.Show() # 显示窗口
app.MainLoop() # 调用主循环方法
服务器的工作原理可以分为4步,1,建立连接2,请求过程3,应答过程4,关闭连接
方法 | 描述 |
GET | 请求指定的页面信息,并返回实体主体 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件).数据被包含在请求体中.POST请求可能会导致新的资源的建立或已有资源的修改 |
HEAD | 类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头 |
DELETE | 请求服务器删除指定的页面 |
PUT | 从客户端向服务器传送的数据取代指定的文档的内容 |
OPTIONS | 允许客户端查看服务器的性能 |
代码 | 含义 |
1** | 信息,请求收到,继续处理 |
2** | 成功,行为被成功接受,理解和采纳 |
3** | 重定向,为了完成请求,必须进一步执行的动作 |
4** | 客户端错误,请求包含语法错误或者请求无法实现 |
5** | 服务器错误,服务器不能实现一种明显无效的请求 |
print('\n'.join([''.join([('Love'[(x-y) % len('Love')] if ((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3 <= 0 else ' ') for x in range(-30, 30)]) for y in range(30, -30, -1)])) #人生苦短,我用python