Python安全攻防之第二章Python语言基础

2023-11-19

2.3 Python模块的安装与使用

  1. python模块的安装

pip3 install 模块名称

py -3 -m pip install 模块名称

  1. 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 循环结构

  1. 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”结尾。

  1. 打开文件并创建对象

通过open()函数就可以指定模式打开指定文件,并创建文件对象,

open(file[, mode='r'[, buffering=-1]])

buffering:指定读写文件的缓冲模式,数值为0表示不缓存,数值为1表示使

用行缓存模式,数值大于1表示缓冲区的大小,默认值为-1。

二进制文件和非交互文本文件以固定大小的块为缓冲单位,等价于io。

  1. 对文件内容进行操作

(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系统下转换

  1. 下载:(https://pypi.org/project/PyInstaller)

  1. 安装: python setup.py install

  1. 打包:pyinstaller -F -i snail.ico shy.py

2.9.2 在Linux系统下转换

  1. 安装: python3 setup.py install

  1. 打包:pyinstaller -F shy.py

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python安全攻防之第二章Python语言基础 的相关文章

  • 使用 python requests 模块时出现 HTTP 503 错误

    我正在尝试发出 HTTP 请求 但当前可以从 Firefox 浏览器访问的网站响应 503 错误 代码本身非常简单 在网上搜索一番后我添加了user Agent请求参数 但也没有帮助 有人能解释一下如何消除这个 503 错误吗 顺便说一句
  • 与区域指示符字符类匹配的 python 正则表达式

    我在 Mac 上使用 python 2 7 10 表情符号中的标志由一对表示区域指示符号 https en wikipedia org wiki Regional Indicator Symbol 我想编写一个 python 正则表达式来在
  • 安装了 32 位的 Python,显示为 64 位

    我需要运行 32 位版本的 Python 我认为这就是我在我的机器上运行的 因为这是我下载的安装程序 当我重新运行安装程序时 它会将当前安装的 Python 版本称为 Python 3 5 32 位 然而当我跑步时platform arch
  • 用枢轴点拟合曲线 Python

    我有下面的图 我想用 2 条线来拟合它 使用 python 我设法适应上半部分 def func x a b x np array x return a x b popt pcov curve fit func up x up y 我想用另
  • 使用 Python 从文本中删除非英语单词

    我正在 python 上进行数据清理练习 我正在清理的文本包含我想删除的意大利语单词 我一直在网上搜索是否可以使用像 nltk 这样的工具包在 Python 上执行此操作 例如给出一些文本 Io andiamo to the beach w
  • 独立滚动矩阵的行

    我有一个矩阵 准确地说 是 2d numpy ndarray A np array 4 0 0 1 2 3 0 0 5 我想滚动每一行A根据另一个数组中的滚动值独立地 r np array 2 0 1 也就是说 我想这样做 print np
  • Pandas Merge (pd.merge) 如何设置索引和连接

    我有两个 pandas 数据框 dfLeft 和 dfRight 以日期作为索引 dfLeft cusip factorL date 2012 01 03 XXXX 4 5 2012 01 03 YYYY 6 2 2012 01 04 XX
  • 如何将张量流模型部署到azure ml工作台

    我在用Azure ML Workbench执行二元分类 到目前为止 一切正常 我有很好的准确性 我想将模型部署为用于推理的 Web 服务 我真的不知道从哪里开始 azure 提供了这个doc https learn microsoft co
  • 使用 xlrd 打开 BytesIO (xlsx)

    我正在使用 Django 需要读取上传的 xlsx 文件的工作表和单元格 使用 xlrd 应该可以 但因为文件必须保留在内存中并且可能不会保存到我不知道如何继续的位置 本例中的起点是一个带有上传输入和提交按钮的网页 提交后 文件被捕获req
  • 为什么 PyYAML 花费这么多时间来解析 YAML 文件?

    我正在解析一个大约 6500 行的 YAML 文件 格式如下 foo1 bar1 blah name john age 123 metadata whatever1 whatever whatever2 whatever stuff thi
  • 如何在不丢失注释和格式的情况下更新 YAML 文件 / Python 中的 YAML 自动重构

    我想在 Python 中更新 YAML 文件值 而不丢失 Python 中的格式和注释 例如我想改造 YAML 文件 value 456 nice value to value 6 nice value 界面类似于 y yaml load
  • Docker 中的 Python 日志记录

    我正在 Ubuntu Web 服务器上的 Docker 容器中测试运行 python 脚本 我正在尝试查找由 Python Logger 模块生成的日志文件 下面是我的Python脚本 import time import logging
  • 如何通过索引列表从 dask 数据框中选择数据?

    我想根据索引列表从 dask 数据框中选择行 我怎样才能做到这一点 Example 假设我有以下 dask 数据框 dict A 1 2 3 4 5 6 7 B 2 3 4 5 6 7 8 index x1 a2 x3 c4 x5 y6 x
  • 如何使用 pybrain 黑盒优化训练神经网络来处理监督数据集?

    我玩了一下 pybrain 了解如何生成具有自定义架构的神经网络 并使用反向传播算法将它们训练为监督数据集 然而 我对优化算法以及任务 学习代理和环境的概念感到困惑 例如 我将如何实现一个神经网络 例如 1 以使用 pybrain 遗传算法
  • pip 列出活动 virtualenv 中的全局包

    将 pip 从 1 4 x 升级到 1 5 后pip freeze输出我的全局安装 系统 软件包的列表 而不是我的 virtualenv 中安装的软件包的列表 我尝试再次降级到 1 4 但这并不能解决我的问题 这有点类似于这个问题 http
  • 根据列 value_counts 过滤数据框(pandas)

    我是第一次尝试熊猫 我有一个包含两列的数据框 user id and string 每个 user id 可能有多个字符串 因此会多次出现在数据帧中 我想从中导出另一个数据框 一个只有那些user ids列出至少有 2 个或更多string
  • 如何在 pygtk 中创建新信号

    我创建了一个 python 对象 但我想在它上面发送信号 我让它继承自 gobject GObject 但似乎没有任何方法可以在我的对象上创建新信号 您还可以在类定义中定义信号 class MyGObjectClass gobject GO
  • Python ImportError:无法导入名称 __init__.py

    我收到此错误 ImportError cannot import name life table from cdc life tables C Users tony OneDrive Documents Retirement retirem
  • cv2.VideoWriter:请求一个元组作为 Size 参数,然后拒绝它

    我正在使用 OpenCV 4 0 和 Python 3 7 创建延时视频 构造 VideoWriter 对象时 文档表示 Size 参数应该是一个元组 当我给它一个元组时 它拒绝它 当我尝试用其他东西替换它时 它不会接受它 因为它说参数不是
  • 使用 z = f(x, y) 形式的 B 样条方法来拟合 z = f(x)

    作为一个潜在的解决方案这个问题 https stackoverflow com questions 76476327 how to avoid creating many binary switching variables in gekk

随机推荐

  • 设计模式--Abstract server模式 VS Adapter 模式

    适配器类似于现实世界里面的插头 通过适配器 我们可以将分属于不同类的两种不同类型的数据整合起来 而不必去根据某一需要增加或者修改类里面的方法 Adapter mode和Proxymode的区别 Proxy的关注点是职能转移 通过引入Prox
  • 单链表——多项式相加

    时间限制 1000ms 内存限制 256M 实验目的 编写代码 使用两个单链表表示下面的多项式 完成两个多项式相加 并输出相加后的多项式结果 实验要求 1 单链表的类型定义如下 typedef int datatype 结点数据类型 假设为
  • Linux学习(八):文件名的查找Find

    Find 一 时间维度 atime ctime mtime 以 mtime为例 mtime n n为数字 意义为在n天之前的 一天之内 被更改过的文件 mtime n 列出在n天之前 不包含n本身 被更改过的文件 mtime n 列出在n天
  • linux超级工具,linux运维超级工具--sysdig

    sysdig 是一个超级系统工具 它可以用来捕获系统状态信息 在运维工作中sysdig能很方便的排查异常 定位故障 它还能保存数据进行分析 并且提供强大的命令接口 在了解sysdig强大之处之前 首先得安装sysdig 我这里是环境是cen
  • 【计算机网络13】网络安全

    文章目录 1 HTTP协议的安全问题 2 单向散列函数 One way hash function 2 1 单向散列函数的特点 2 2 常见的几种单向散列函数 2 3 防止数据被篡改 2 4 几个网站 3 对称加密 Symmetric Cr
  • Filebench 使用手册

    Filebench 使用手册 介绍 Filebench 是一个文件系统和存储基准 可以生成各种各样的工作负载 与典型的基准测试不同 它非常灵活 允许使用其广泛的工作负载模型语言 WML 指定应用程序的 I O 行为 用户可以从头开始描述所需
  • 当矩阵的秩小于未知数的个数时,方程组有无数个解;当矩阵的秩等于未知数的个数时,方程组只有零解。...

    当矩阵的秩小于未知数的个数时 方程组有无数个解 当矩阵的秩等于未知数的个数时 方程组只有零解 转载于 https www cnblogs com 2019 02 11 p 10586212 html
  • springboot配置启动后自动打开浏览器访问项目

    springboot配置项目启动后自动打开浏览器访问项目 有时候在单机部署 或者项目没有在IDea 开发工具中运行 idea可以自动打开tomcat项目 需要项目启动后自动打开浏览器访问项目 配置方法很简单 一 具体步骤 所用到的代码只有下
  • QT在图片中间绘制文字,获取文字size 和 pos

    QFont ft this gt font 获取系统当前字体对象 ft setPixelSize 15 设置字体大小 QFontMetrics fm QFontMetrics ft 创建字体计算类 double pixW fm width
  • 【基础】Flink -- ProcessFunction

    Flink ProcessFunction 处理函数概述 处理函数 基本处理函数 ProcessFunction 按键分区处理函数 KeyedProcessFunction 定时器与定时服务 基于处理时间的分区处理函数 基于事件时间的分区处
  • 用vscode创建一个c项目_vscode怎样编写c程序

    一 获取C C 扩展 1 打开vscode 2 ctrl shift x打开商店 3 搜索C C 安装 重启vscode 二 安装GCC 1 下载MinGW 2 打开安装程序 安装到D盘 需要创建MinGW文件夹 安装完成之后生成MinGW
  • (手工)【sqli-labs32-38】宽字节注入、报错回显、字符/数字型注入

    目录 一 推荐 二 手工 SQL注入基本步骤 三 Less32 GET Bypass custom filter adding slashes to dangerous chars 3 1 简介 宽字节注入 报错回显 字符型注入 3 2 第
  • JVM简介说明

    转自 JVM简介说明 下文笔者讲述JVM的简介说明 如下所示 JVM简介 JVM的功能是Java应用程序的运行环境 它是Java虚拟机 JVM用于运行java的字节码文件 JVM可以将字节码转换为硬件 操作系统指令 JVM用于同操作系统内层
  • 【HJ31】 单词倒排

    题目描述 对字符串中的所有单词进行倒排 说明 1 构成单词的字符只有26个大写或小写英文字母 2 非构成单词的字符均视为单词间隔符 3 要求倒排后的单词间隔符以一个空格表示 如果原字符串中相邻单词间有多个间隔符时 倒排转换后也只允许出现一个
  • ubuntu 串口助手通信收发数据不一致

    文章目录 问题背景 一 解决方案 1 直接更换硬件 靠这个解决的 2 其他参考 总结 问题背景 主机1 win10笔记本电脑 主机2 ubuntu16 04的宸曜工控机 主机3 ubuntu14 04的一个小盒子 串口助手 cutecom
  • pmd java规则_静态代码扫描 (一)——PMD 自定义规则入门

    阅读该文章前 最好已经对 PMD 有了初步的认识和了解 可参考静态分析工具 PMD 使用说明 准备工作 首先在PMD 官网下载最新版本的文件 目前最新版本是 5 4 1 下载 pmd bin 5 4 1 zip 和 pmd src 5 4
  • QT串口助手的实现

    serial c include serial h include ui serial h serial serial QWidget parent QWidget parent ui new Ui serial ui gt setupUi
  • 【数据库】MySQL三大日志:binlog、redo log和undo log

    MySQL三大日志 binlog redo log和undo log 日志是mysql数据库的重要组成部分 记录着数据库运行期间各种状态信息 mysql日志主要包括错误日志 查询日志 慢查询日志 事务日志 二进制日志几大类 作为开发 我们重
  • 土壤含水量仪的监测方法

    土壤含水量监测仪对土壤内部水分含量情况进行监测 可实现对灾害隐患点土壤含水量的长期实时监测 仪器主机采用低功耗设计 工作功耗可达毫瓦级 根据滑坡隐患点的特点 仪器主机采用多通道设计 可根据实际情况接驳1 4路土壤含水量传感器对监测点不同深度
  • Python安全攻防之第二章Python语言基础

    2 3 Python模块的安装与使用 python模块的安装 pip3 install 模块名称 py 3 m pip install 模块名称 python模块的导入与使用 1 Import模块名称 采用 Import模块名称 方式时 需