1 hello world

新建文件demo.py,添加如下内容

  1. #!/usr/bin/python
  2. print("hello world")
  3. print "who are you?"

运行

  • python demo.py
  • chmod a+x demo.py,给与demo.py执行权限, ./demo.py

运行结果

image.png
输出中文

  1. #!/usr/bin/python
  2. print("hello world")
  3. print "who are you?"
  4. print "你好"

非python3.x版本输出会报错,因为低版本版本中默认编码格式是ASCII格式,中默认的编码格式编码格式为ASCII格式,可以python文件中设置编码格式来消除次问题
image.png

第二行添加#-- coding:UTF-8 --或coding=utf-8即可

  1. #!/usr/bin/env python
  2. #-*- coding:UTF-8 -*-


image.png

python3.x版本不需配置,可正常输出中文

2 函数

规则:

  • 以def关键字开头,后跟函数名和(),()中为参数列表通过”,”分隔
  • 函数体以冒号起始,并且缩进
  • 函数体不需要放到{}中
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明
  • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None
  1. def fun1(param1,param2):
  2. print "param1:",param1
  3. print "param2:",param2
  4. return "retstr"
  5. print fun1("111","222")

3 数据类型

Python中的变量不需要指定类型

Number

数字

  • int,有符号整型
  • long,有符号长整型
  • float,浮点型
  • complex,复数,由实数部分和虚数部分组成,python学习笔记 - 图4或complex(a,b)表示,a和b都是浮点型

    String

    字符串,数字、字母、下划线组成,是编程语言中表示文本的数据类型。
    字串列表有2种取值顺序:

  • 从左到右索引默认0开始的,最大范围是字符串长度少1

  • 从右到左索引默认-1开始的,最大范围是字符串开头

可通过[头下标:尾下标] 的方截取字符串

  1. str="0123456789"
  2. print str
  3. print str[0:]
  4. print str[:3]
  5. print str[0:3]
  6. print str[-10:-7]

image.png

可通过[下标] 的方获取字符,和C/C++中类似
加号(+)是字符串连接运算符,
星号(*)是重复操作

  1. str1="hello,"
  2. str2="world"
  3. str3=str1+str2
  4. print str3
  5. print str3*3

image.png

List

列表用 [ ] 标识,是 python 最通用的复合数据类型。

表中值的切割也可以用到变量 [头下标:尾下标] ,就可以截取相应的列表,从左到右索引默认 0 开始,从右到左索引默认 -1 开始,下标可以为空表示取到头或尾。

  1. list=["Mike",12,"Jone",13,"Jack",14,"Lucy",15]

image.png

列表截取时可以指定第三个参数,表示截取的步长,默认为1,步长为2时如下图所示

  1. print list[0:4:2]

image.png

空列表添加元素

  1. animal=[]
  2. animal.append("dog")
  3. animal.append("cat")
  4. animal.append("pig")
  5. print(animal)
  6. Len=len(animal) #列表长度为3

list长度

  1. list=["Mike",12,"Jone",13,"Jack",14,"Lucy",15]`
  2. Len=len() #列表长度为3

加号 + 是列表连接运算符,星号 * 是重复操作。

Tuple

元组
元组是类似于 List,用 () 标识。内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表

Dictionary

字典
列表为有序对象集合,字典为无序对象集合
两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

  1. dict={}
  2. dict["Mike"]="大狗"
  3. dict["Jone"]="二狗"
  4. dict["Jack"]="三狗"
  5. dict["Lucy"]="三狗"
  6. print "Mike=",dict["Mike"]
  7. print "Jone=",dict["Jone"]
  8. print "Jack=",dict["Jack"]
  9. print "Lucy=",dict["Lucy"]
  10. # 获取key的值,如key不存在,则返回default
  11. # get(,default)
  12. print "Mike=",dict.get("Mike","not found")

image.png

5 运算符

1. 算术运算符

运算符 描述 示例 优先级
算术 + a+b (9+2=11)
- a-b (9-2) =7
* ab (9 2)=18
/ a/b (9 / 2)=4.5
% 取模 a%b (9 % 2)=1
** ab (92) = 81
// 取整除(向下) a//b (9//2) = 4
比较 == 等于
!= 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
赋值 = 赋值
+= 加赋值
-= 减赋值
*= 乘赋值
/= 除赋值
%= 取模赋值
**= 幂赋值
//= 取整除赋值
位运算 & 按位与
| 按位或
^ 按位异或
~ 按位取反
<< 左移(高位丢失,低位补零)
>> 右移
逻辑 and 逻辑与 a and b(9 and 2 = 2,
2 and 9 = 9)
or 逻辑或 a or b(9 or 2=9,
2 or 9 = 2)
not 逻辑非 not a(not 2 = False,
not False = True)
成员 in 在指定序列
not in 未在指定序列
身份 is 引用同一对象
not is 引用不同对象
()
[ ]
.

6 条件语句

  1. cond=True
  2. if cond:
  3. print("满足条件")
  4. else:
  5. print("不满足条件")
  1. val=3
  2. if val==1:
  3. print("条件1")
  4. elif val==2:
  5. print("条件2")
  6. elif val==3:
  7. print("条件3")
  8. else:
  9. print("其它")
  1. val = 3
  2. if val > 0 and val <5
  3. print("结果")
  4. if val <0 or val >5
  5. print("结果")

7 循环语句

for循环

  1. #0-9
  2. for num in range(10):
  3. print(num)
  4. for letter in "Python":
  5. print(letter)
  6. animals=["dog","cat","snake"]
  7. for animal in animals:
  8. print(animal)

while循环

  1. a=0
  2. while a < 10:
  3. a+=1
  4. print(a)
  1. data=[0,1,2,3,4,5,6,7,8,9]
  2. even=[]
  3. odd=[]
  4. while len(data) != 0:
  5. n=data.pop()
  6. if(n%2 == 0):
  7. even.append(n)
  8. else:
  9. odd.append(n)
  10. print("even:",even)
  11. print(" odd:",odd)

image.png

8 文件I/O

从键盘输入

  1. str=input("请输入:")
  2. print(str)

打开文件

  1. # file object = open(file_name [, access_mode][, buffering])
  2. obj=open("hello.txt","w")
  3. #输出文件名
  4. print(obj.name)
  5. #查看文件是否关闭
  6. print(obj.closed)
  7. obj.write("hello\n")
  8. #关闭文件
  9. obj.close()
mode 描述
w 只写模式,清空,创建新文件
r 只读模式
w+ 读写模式,清空,创建新文件
r+ 读写模式
wb 二进制只写模式,清空,创建新文件
rb 二进制只读模式
wb+ 二进制读写模式,清空,创建新文件
rb+ 二进制只读写模式
a 追加,创建新文件
ab 二进制追加,创建新文件
a+ 读写追加,创建新文件
ab+ 二进制读写追加,创建新文件

9 异常

  1. try:
  2. action 1
  3. expect err1:
  4. action 2
  5. expect err2:
  6. action3
  7. else:
  8. action4

10 模块学习

代码导入模块

  1. import pexpect
  2. 这种方法在使用模块函数时需要使用模块名称
  3. pexpect.spawn(ls -l)

命令行导入模块

  1. >>> import pexpect
  2. >>> help(pexpect)
  3. >>> dir(pexpect) 打印该模块所有内容
  4. >>> help(pexpect.spawn) 查看帮助

1 pexpect模块

  1. child=pexpect.spawn("ls -l")
  2. index=child.expect(["log.txt","tags"])
  3. expect的返回值index值为列表中元素索引,命中"log.txt"返回0.命中"tags"返回1,可以此开判断命中哪个期望
  4. child.before为命中expect值之前的部分,child.afterexpect本身

11 符号

Python中 ''"" 单双引号含义相同,必要时可以规避转义

备注

提示缩减异常时需要确认对应行首是否有tab,将tag更换为空格可消除此问题

  1. IndentationError: unexpected indent

字符串经split分割后为一个应该是一个字符串列表,通过len查看元素个数

12 bytes与hexStr转换

13 scapy

  • 构造普通报文 ```python from scapy.all import *

pkts = []

payload=”\ \x46\x00\x00\x00\x54\x00\x00\x00\x65\x00\x10\x00\x00\x00\x41\x43\ \x50\x5a\x31\x30\x33\x31\x30\x39\x32\x35\x31\x57\x57\x57\x04\x00”

pkt = Ether()/IP(version=4,src=”124.89.180.152”)/TCP(sport=8911,dport=8890)/payload1

pkts.append(pkt); wrpcap(“test.pcap”, pkts)

  1. - 显示报文
  2. ```bash
  3. >>> p = rdpcap("get_doc.pcap") #打开报文
  4. >>> p[0] # 显示包0的内容