2.3 Python模块的安装与使用
python模块的安装
pip3 install 模块名称
py -3 -m pip install 模块名称
python模块的导入与使用
(1)Import模块名称
采用“Import模块名称”方式时,需要在对象前面加上模块名称作为前缀,具体形式为“模块名称.对象”,如下列命令所示:
(2)From 模块名称 import 对象名
使用“From模块名称import对象名”方式仅导入明确指定的对象,这样可以使程序员只输入少量的代码,并且不需要使用模块名称作为前缀
虽然此方法有很多好处,但是如果多个模块中有同名的对象,这种方式将导致只有最后一个导入的模块中的同名对象生效。
2.4 Python序列
python序列:列表、元组、字典
2.4.1 列表
方括号的叫列表[]
(1)创建列表
(2)删除列表
(3)在列表尾部添加元素
list.append(需要添加的元素)
list.extend(需要添加的列表)
(4)在列表的指定位置插入元素
list.insert(7,demo)
(5)删除列表中首次出现的元素
list.remove(0)
(6)删除并返回被删除元素的下标
list.pop() 默认删除最后一个元素
list.pop(0) 删除下标为0的元素
(7)统计并返回该元素在列表中的数量
list.count()
(8)将列表list中的所有元素逆
list.reverse()
(9)对列表中list中的元素进行排序
key:用来指定排序一局
reverse:False升序、True降序
2.4.2 元组
元组中的所有元素都在一对圆括号中,元素之间用逗号隔开。
元组与列表不同,元组属于不可变序列,一旦创建后便无法对元素进行增删改查,
1、元素的访问速度要比列表快得多。
2、由于不能更改元组中的元素,其代码更加安全。
2.4.3 字典
不同于在渗透测试中使用的字典,Python中的字典是包含若干“键:值”元素的可变序列,字典中的每一个元素都包含用冒号分开的“键”和“值”,不同元素之间用逗号隔开,所有元素放在一对大括号“{”和“}”中。另外,需要注意的是字典中的“键”不能重复,而“值”可以重复。
(1)通过dict()创建字典
(2)修改字典中的元素
dic['age']=24
(3)为字典添加新元素
dic['hobby']='game'
(4)返回字典中的所有元素
dic.items()
(5)删除字典中的元素
del dic['sex']
2.5 Python控制结构
顺序结构:
条件结构:
循环结构:是通过重复有规律性的操作,从而减少代码量,使代码表达更为简洁
2.5.1 选择结构
print('please input your scores:')
score=int(input())
if(score>80):
print('优秀')
if(score>=60):
print('及格')
if(score<60):
print('不及格')
2.5.2 循环结构
for循环
当循环次数有界限时,即知道要循环多少次时,用for循环
用for循环求解1+2+3+ …+100
sum=0
for i in (1,99):
sum=sum+i
print(sum)
2.while循环
当循环次数无界限时使用while循环。
print('please input a num:')
x=int(input())
i=0
sum=0
while i<=x:
sum=sum+i
i=i+1
print(sum)
print('please input a num:')
x=int(input())
sum=0
while x!=0:
sum=sum+x
x=x-1
else:
print(sum)
2.6 文件处理
文本文件中存储的是常规字符串,由文本行组成,每行通常由换行符“\n”结尾。
打开文件并创建对象
通过open()函数就可以指定模式打开指定文件,并创建文件对象,
open(file[, mode='r'[, buffering=-1]])
buffering:指定读写文件的缓冲模式,数值为0表示不缓存,数值为1表示使
用行缓存模式,数值大于1表示缓冲区的大小,默认值为-1。
二进制文件和非交互文本文件以固定大小的块为缓冲单位,等价于io。
对文件内容进行操作
(1)向文本文件中写入内容
w:写入模式。文件存在会清空文件,文件不存在,会创建文件
x:写入模式。文件存在会抛出异常,文件不存在,会创建文件
a:追加模式。也是写入模式的一种,不覆盖原文件,会追加到原文件后面。
s='hello world!\n'
f=open('demo.txt','x')
f.write(s)
f.close()
(2)读取文件中的内容
r:读模式(默认模式,可以省略),如果文件不存在,则抛出异常。
·+:读写模式(可与其他模式组合使用)。
f=open('demo.txt','r')
print(f.readline())
print(f.read())
readline():读取第一行
read():读取全部内容
3.关闭文件对象
当操作完文件内容以后,一定要关闭文件对象,这样才能确保所做的修改都保存到了文件当中
f.close()
文件操作一般都要遵循“打开→读写→关闭”的基本流程,但是如果文件读写
操作代码引发了异常,就很难保证文件能够被正常关闭。可以使用上下文管理关
键字with来避免产生这个问题。关键字with能够自动管理资源,总能保证文件正
确关闭,并且可以在代码执行结束后自动还原开始执行代码块时的现场。
with open('demo.txt','a') as f:
f.write('hello world \n')
2.7 异常处理结构
Python中提供了很多不同形式的异常处理结构,其基本思路都是先尝试执行
代码,再处理可能发生的错误。
1.try…except…结构
try子句中的代码块为可能引发异常的语句,except子句用来捕获相应的异常。也可以解
释为,当try子句代码块执行异常并且被except子句捕获时,执行except子句的代码块
score=input('请输入成绩:')
try:
score=int(score)
if(60<score<100):
print('及格了')
else:
print('没及格')
except Exception as e:
print('你的输入有误')
2.try…except…else…结构
如果try中的代码出现异常,则执行except中的异常处理代码。
如果没有异常,则执行else中的代码
score=input('请输入成绩:')
try:
score=int(score)
except Exception as e:
print('输入的数值有误会')
else:
if(60<score<100):
print('及格了')
else:
print('没及格')
3.try…except…finally…结构
在try…except…finally…结构中,无论try子句是否正常执行,finally子句中的代码块总会得到执行。在日常开发过程中,该结构通常用来做清理工作,释放try子句中申请的资源。
a=int(input('a:'))
b=int(input('b:'))
try:
div=a/b
print(div)
except Exception as e:
print('error')
finally:
print('finally')
2.8 Socket网络编程
Socket是计算机之间进行网络通信的一套程序接口,相当于在发送端和接收端之间建立了一个通信管道。
在实际应用中,一些远程管理软件和网络安全软件大多依赖于Socket来实现特定功能,由于TCP(Transmission Control Protocol,传输控制协议)方式在网络编程中应用得非常频繁,此处将对TCP编程进行讲解并给出具体应用实例。
编写TCP时一般会用到的Socket模块,其方法主要包括:
·connect(address):连接远程计算机。
·send(bytes[,flags]):发送数据。
·recv(bufsize[,flags]):接收数据。
·bind(address):绑定地址。
·listen(backlog):开始监听,等待客户端连接。
·accept():响应客户端的一个请求,接受一个连接。
使用TCP进行通信,首先需要在客户端和服务端建立连接,并且要在通信结束后关闭连接以释放资源。由于TCP是面向连接的,因此相对于UDP提供更高的可靠性。下面通过示例展示如何通过TCP进行通信。
例如,设计一个对话系统“小艾”。该应用分为两部分,一部分为服务端,一部分为客户端。客户端发送请求信息,服务端返回应答信息。两部分的代码如下所示
#服务端代码
import socket
language={'what is your name':'I am Tom','how old are you':'25','bye':'bye!'}
host="127.0.0.1"
port=4444
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((host,port)) //绑定地址
s.listen(1) //开启监听
print('listen at port 4444')
conn,addr=s.accept() //接受客户端请求
print('Connect by:',addr)
while True:
data=conn.recv(1024) //接收数据
data=data.decode()
if not data:
break
print('Received message:',data)
conn.sendall(language.get(data,'Nothing').encode()) //发送数据
print(language.get(data,'Nothing'))
conn.close()
s.close()
import socket,sys
host="127.0.0.1"
port=4444
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
s.connect((host,port)) //链接远程计算机
except Exception as e:
print('server not found!')
sys.exit()
while True:
c=input('you say:')
s.sendall(c.encode()) //发送数据
data=s.recv(1024) //接受数据
data=data.decode()
print('Received:',data)
if c.lower()=='再见':
break
运行服务端:
运行客户端:
服务端根据建立的字典进行自动回复:
2.9 可执行文件的转换
将python程序打包成exe。
工具:PyInstaller
注意:用PyInstaller打包的执行文件,只能在与执行打包操作的系统类型相同的环境下运行。也就是说,这样的执行文件不具备可移植性,
2.9.1 在Windows系统下转换
下载:(https://pypi.org/project/PyInstaller)
安装: python setup.py install
打包:pyinstaller -F -i snail.ico shy.py
2.9.2 在Linux系统下转换
安装: python3 setup.py install
打包:pyinstaller -F shy.py