常用模块
re*****
import re
# \w 英文字母 数字 下划线 _ a-z A-Z 0-9 word
# print(re.findall('\w','abcd1232132!@#_#@@!#'))
# 与\w相反 只要是大写字符 就是与小写字符相反的意思
# print(re.findall('\W','abcd1232132!@#_#@@!#'))
#匹配数字 0_9数字 digit \d
# print(re.findall('\d','123asd!@#$#%^$&*()'))
#匹配任何不可见的 \S肉眼看得见的..\s
# print(re.findall('\s','\n \t \f \v 123 123 '))
#除了\n之外的 .
# print(re.findall('.','123\n \n \raskdjl'))
#重复匹配 *表示0到无穷 0次也满足 则意味着 就算内容中没有任何内容匹配也会给你一个控制阀 因为空字符也算0次
# print(re.findall('\w*','ashdjk213!@#'))
# +1到无穷次
# print(re.findall('\w+','ashdjk213!@#'))
# {a,b} 最少a次 最多b次
# print(re.findall('\w{,2}','ashdjk213!@#'))
#{1,}1-无穷 与+的意思相同
# {0,2} 0-2 {1,2{} 1-2 {,1} 与?意思相同
# 0-1次
# print(re.findall('\w?','sd a123213'))
# *无穷(随便几次 没有也行)
# + 1-无穷
# ? 0-1
# {a,b} 手动指定匹配次数
#位置匹配 ^开始处匹配 从结尾处匹配$
# print(re.findall('^a\w*','wqewqe'))
# print(re.findall('\w*g$','wqewqeg'))
# 1.到最后看一眼是不是与表达式匹配 如果不匹配直接放弃
#如果结尾处没问题 在回过头来从前面开始匹配
# 匹配出现{n}次
# print(re.findall('a{2}','aaaaas'))
#范围匹配 指定哪些内容是你要的 画一个范围
# print(re.findall('1|2|3*','12312312453431232123'))
#[abcd]范围匹配
#如果内容中匹配-时 放前面或者放后面或者\-
# print(re.findall('[1-3]+','123asd123'))
# print(re.findall('[123]+','123asd123'))
# print(re.findall('[0-9a-zA-Z]+','asdjklDFAASS123asd123'))
#取反[^a-b]
# print(re.findall('[^0-9]','123asd'))
#贪婪匹配与非贪婪匹配
#贪婪指的是尽可能的匹配更多的内容
print(re.findall('ab+','abbbbb'))
#非贪婪指的是 金可能的匹配少的内容(主要用的)
print(re.findall('ab*?','ababbbb'))\
# 当我们需要从匹配结果中拿出来一部分时 就需要分钟把你要的内容加上括号即可
# 当我们需要从一个匹配结果中拿到多个不同部分时 可以加多个分组
#findall会把这些部分放到元祖中
#search也是全文查找但是只返回找到的第一个
# print(re.search('as','pas da sd asd').group())
#从字符串开始出开始匹配 第一个不匹配直接放弃 与^效果相同
# print(re.match('as','pas da sd asd'))
# 将表达式打包成对象,这样可以多次使用无需重新编写
# p=re.compile('as','pas da sd asd')
#print(re.split('\s','pab pad s dsa asd'))
#替换内容
# 旧的内容 新的内容 待处理的字符串 sub
print(re.sub('python','PYTHON','python is nb python'))
print(re.sub('python(.+)python',r'python\1PYTHON','python is nb python'))
shutil***
'''
shutil
高级的文件处理
封装的更简单了
主要是文件的重弄之,移动,压输解压测试
'''
import shutil
# 文件发㢟
# f1=open('test.txt','rb')
# f2=open('testcopy.txt','wb')
# shutil.copyfileobj(f1,f2)
# shutil.copyfile('test.txt','testcopy2.txt')
#需要保证目标文件已经存在,才能保证权限
# shutil.copyfile('test.txt','testcopy3.txt')
# shutil.copymode('test.txt','testcopy3.txt')
#拷贝文件的访问信息
# shutil.copystat('test.txt','testcopy3.txt')
#base_name 指定文件的名字
#默认把当前执行文件所在目录全部压缩
#如果同时指定了root和base base生效 并且会把需要压缩文件的的完整文件一并压缩
shutil.make_archive('abc','zip',roor_dir='路径')
#解压
shutil.unpack_archive('abc.zip','mydir')
configparser***
config parser
配置文件解析模块
配置应用程序的文件
配置信息指的是,程序中有一些数据需要用户自己来指定,不应该固定死
这就需要配置文件了
对于配置文件而言,我们的程序最常见的就是读取配置文件操作
当configpasper模块也 能修改和创建配置文件 但不常用
'''
import configparser
cfg=configparser.ConfigParser()
cfg.read('1.cfg',encoding='utf-8')
print(cfg.sections())#获取所有分区名字
print(cfg.get("atm","name"))#获取某个选项的值
#所有选项到的都是字符串类型
#提过了getint等转换类型
hashlib****
'''
hash
unhashable 不可hahash 是可变的
hash是一种算法
特点:
1.输入任意长度的数据 输出固定长度的字符串 因此也称之为信息摘要算法
2.hash算法有很多实现方式,当算符固定时,如果输入相同,输出结果必然相同(极小的几率会出现 不同输入 产生相同的结果)
3.无法通过hash结果反解出源数据
使用场景
1.可以用于加密
2.用于文件校验
'''
import hashlib
#创建一个加密对象
m = hashlib.md5()
#计算123456的哈希值
m.update('123456'.encode('utf-8'))
#提取加密结果
print(m.hexdigest())
subfprocess
'''
subprocess
子进程
进程就是一个正在运行中的程序
一个进程a在运行过程中开启了另一个进程b
b就称之为a的子进程
当你的程序在运行过程中有一个任务,不能直接处理,需要其他的程序来提供帮助时 就需要开启子进程
subprocess模块的目的就是要使得子进程(执行了一个系统指令)把数据输出到我的程序中
'''
import subprocess
p=subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE)
res=p.stdout.read()
print(res.decode('gbk'))
xldt,xlwd****
import xlrd
#读取文件 得到一个工作簿对象
# work_book=xlrd.open_workbook(r'F:\untitled2\公司机密数据.xlsx')
# sheet=work_book.sheet_by_index(1)
# print(sheet.row(1))#获取第二行的所有数据
# print(sheet.row_len(1))#获取第二行有几个单元格
# print(sheet.row_slice(1))#获取第二行的所有数据
# #第一个数字是索引 第二个是开始的列索引 第三个是结束的列索引
# print(sheet.row_slice(1,2,4))#获取第二行的第二索引为2到4的 不包含4
# print(sheet.row_types(1,2,4))#获取第二行的第二索引为2到4的数据类型 不包含4
# print(sheet.nrows)
# print(sheet.ncols)
# print(sheet.name)
# print(sheet.cell_type(2,0))
# print(sheet.cell(2,0).value)
# print(sheet.cell(2,0))
# print(sheet.cell(2,0).ctype)
# print(sheet.col_slice(0,3,5))#切片得到的是一个列表 里面放的是单元格
# print(sheet.col_slice(0,3,5)[0].value)#取出第零个单元格的值#切片得到的是一个列表 里面放的是单元格
# print(sheet.col_slice(0,3,5)[0].ctype)#取出第零个单元格的值#切片得到的是一个列表 里面放的是单元格的类型
#获取所有数据
# worl_book=xlrd.open_workbook('公司机密数据.xlsx')
# sheet=worl_book.sheet_by_index(1)
# for i in range(sheet.nrows):
# for cell in sheet.row_slice(i):
# print(cell,end='')
# print()