shutil
高级文件处理模块
封装的更简单了
主要是文件的复制,移动,压缩解压缩 需要保证目标文件已经存在
shutil.copymode('test.txt','testcopy4.txt') 压缩与解压缩 base_name 指定压缩文件的名字
默认把当前执行文件所在目录全部压缩 如果同时指定了 root和base base生效 并且会把需要压缩的文件的完整路径一并压缩 re
regexp 正则表达式
正则表达式是什么
由一堆特殊符号责成的表达式
作用
处理字符串
1.从字符串中获取满足某种规则的内容 在爬虫程序中大量出现
2.判断一个字符串内容是否满足某个规则 例如:手机号验证,邮箱验证
学习的重点就是围绕这一堆符号 import re
re.findall('\w','abcd 12345 ++--**')
只要是大写字符 就是与小写字符相反的意思 . 除了\n外的所有字符
单个字符匹配 重复匹配 数字 字母下划线 * 表示0-无穷次
0次也满足 则意味着 就算内容没有任何内容匹配也会给你一个空字符 因为空字符也算0次匹配 从网络中下载一个HTML文档,从里面提取所需要的内容 + 表示 1-无穷次
{a,b}最少a次 最多b次
{1,} 1-无穷与+的意思相同
{,2} 0-2
{1,2} 1-2
{,1} 0-1与?意思相同
* 0-无穷(随便几次)
+ 1-无穷
? 0-1次
{} 手动指定匹配次数 位置匹配 ^ $
^从字符开始出匹配
$从字符结尾处匹配
1.是先到最后看一眼是不是与表达式匹配 如果不匹配直接放弃
2.如果结尾处没问题 在回过头来从前面开始匹配 ^与$同事出现 同事限定开始出和结尾处 范围匹配 可以指定哪些内容是你要的 划一个范围
a|b 模仿 \w 数字 字母 下划线[0-9a-zA-Z_] 贪婪匹配 与非贪婪匹配
贪婪指的是 尽可能的匹配更多的内容
非贪婪指的是 尽可能的匹配少的内容 贪婪的例子
print(re.findall('ab+',''))
非贪婪的例子
print(re.findall('ab+?',''))
print(re.findall('ab*?','')) htm = """<img src="http://img.ivsky.com/img/tupian/t/201808/07/qingting-001.jpg" alt="轻盈停落的蜻蜓图片">
title="轻盈停落的蜻蜓图片 3996x2664" target="_blank"><img src="http://img.ivsky.com/img/tupian/t/201808/07/qingting-002.jpg">
""" 贪婪模式会一次性取到最后一个双引号为止
print(re.findall('src=".+"',htm)) 加上?变成费贪婪模式
print(re.findall('src=".+?"',htm)) 分组把要的内容加括号
print(re.findall('src="(.+?)"',htm)) 当我们需要从一个匹配结果中拿到多个不同部分是 可以加多个分组
findall会把这些部分放到元组中
print(re.findall(('src=)"(.+?)"',htm)) re.search().group()
也是全文查找 但是只返回 找到的第一个 re.match
从字符串开始匹配 第一个不匹配直接放弃 与^效果相同 p=re.compile('ab')
将表达式打包成对象 这样可以多次使用无需重新编写 re.sub()
替换内容
待处理字符串 旧的内容 新的内容
import re
# print(re.findall('\w','1511a3dsf1a5df /-/-*/-*/')) # print(re.findall('\D','-//a-s*df/-a*sd/f-*as/d-f*as/df-af')) # print(re.findall('\w?','aaavvvcd'))
# print(re.findall('\w+','aaavvvcd'))
# print(re.findall('\w*','aaavvvcd'))
# print(re.findall('\w{,2}','aaavvvcd')) # print(re.findall('[^0-9]','13213212321abc_+*'))
# print(re.findall('[-a-z0-9]','-s0')) # import configparser
# cfg=configparser.ConfigParser()
# cfg.read("my.cfg",encoding='utf-8')
#
# print(cfg.sections())#获取所有分区名字
# print(cfg.get('ATM','username'))#获取某个选项的值
# print(cfg.get('ATM','password'))#获取某个选项的值 # def login():
# user=input('用户名:').strip()
# pwd =input('密码:').strip()

  


hashlib
unhashable 不可hash 是可变的
hash 是一种算法
特点:
1.输入任意长度的数据 输出固定长度的字符串 因此也称之为信息摘要算法
2.hash算法有很多实现方式 当算法固定时,如果输入相同,那么输出结果必然相同
(极小的几率会出现,不同的输入产生相同的结果)
3.无法通过hash的结果反解出原数据 使用场景
1.可以用于加密
2.用于文件校验 import hashlib
创建一个加密对象
m=hashlib.md5()
计算123456的hash值
m.update('123456'.encode('utf-8'))
提取加密结果
print(len(m.hexdigest())) update 可以多次执行 也就意味着你可以打开文件 读一次就调用一次update
简单的密码可以通过撞库破解,所以我们最好给密码加点盐,在原有的数据基础上加上一段固定的数据 subprocess
子进程
进程就是一个正在运行的程序
一个进程a在运行过程中开启了另一个进程b
b就称之为a的子进程
当你的程序在运行过程中又一个任务,不能直接处理需要其他程序
提供帮助时就需要开启子进程
import subprocess
subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE)
res=p.stdout
print(res.decode('GBK')) subprocess 模块的目的就是要使得子进程(执行了一个系统指令)可以把数据输出到我的程序中 configparser
配置文件解析模块
配置应用程序的文件
配置信息指的是 程序中有一些数据根据用户自己来指定 不应该固定死 比如qq中开机启动这一个数据
这就需要配置文件
对于配置文件而言,我们的程序最常见的就是读取配置文件操作
当然configparser 模块也能修改和创建配置文件 但不常用
# 所有选项获取的到的都是字符串类型
print(type(cfg.get("atm","password"))) # 提供了 getint getboolean get float 可以直接帮你转换类
print(cfg.getint("atm","age"))
print(type(cfg.getint("atm","age"))) # 判断是否存在分区 或 选项
print(cfg.has_option("atm","age"))
print(cfg.has_section("atm")) # 获取某个分区下的所有选项
print(cfg.options("atm"))
# 删除分区 和选项
print(cfg.remove_section("car"))
print(cfg.remove_option("atm","sex")) # 修改或是添加 如果有就修改 没有则添加
cfg.set("atm","age","30") # 添加分区
cfg.add_section("test")
cfg.set("test","账号","大山炮") # 写入文件
with open("my.cfg","wt",encoding="utf-8") as f:
cfg.write(f) option 配置ATM
[ATM] 称之为一个分区 section
username=root
password=123 [shopping_car]
配置购物车
username=root 所有的选项获取到的都是字符串类型
提供了getint getboolean get float可以直接帮你转换类 代码 import configparser
import os def login():
if exists_usercfg():
cfg = configparser.ConfigParser()
cfg.read("user.cfg",encoding="utf-8")
user = cfg.get("info","username")
pwd = cfg.get("info","password")
else:
user = input("用户名:")
pwd = input("密码:") if user == "李大炮" and pwd == "213":
print("登录成功!")
if not exists_usercfg():
res = input("是否记住密码?y/n")
if res == "y":
jzmm(user,pwd) # 记住密码函数
def jzmm(user,pwd):
cfg = configparser.ConfigParser()
cfg.add_section("info")
cfg.set("info","username",user)
cfg.set("info","password",pwd) with open("user.cfg","wt",encoding="utf-8") as f:
cfg.write(f) def exists_usercfg():
if os.path.exists("user.cfg"):
return True login()
xlrd 读取excle表格数据
xlwt 写入数据到excel表格中 import xlrd
读取文件 得到一个工作簿对象
work_book=xlrd.open_workbook('xxx.xlsx')
sheet=work_book.sheet_by_index(1)
sheet.row 第一行所有
sheet.row_len 第一行的几个单元格
sheet.row_slice(1) 第二行所有
sheet.row_slice(1,2,4)第二行索引2-4不包含4
第一个是行索引 第二个是开始列索引 第三个是结束的列索引 print(sheet.row_values(6,0,4))获取某些段远哥的数据值 有几行就循环几次
for i in range(sheet.nrows)
print(i)
通过索引拿到每一行
print(sheet.row_slice(i))
for cell in sheet.row_slice(i)
在每一行中取出每一个单元格
print(cell.value)
print(cell.ctype) 将这个表格的数据转成字典类型
1.先拿到所有的key
keys = [cell.value for cell in sheet.row_slice(1)]
print(keys) for i in range(2,sheet.nrows):
# 有几次循环就有几个人员信息
# 建立一个新字典
dic = {}
rows = sheet.row_slice(i)
key_index = 0
for cell in rows:
if key_index == 3: #说明是日期 需要转换
dic[keys[key_index]] = str(xlrd.xldate_as_datetime(cell.value,1))
else:
dic[keys[key_index]] = cell.value
key_index += 1
persons.append(dic) import xlwt
# 创建工作簿
work = xlwt.Workbook()
# 创建一个表
sheet = work.add_sheet("员工信息数据") # 写入标题
for k in keys:
# 行索引 列索引 第三个是要写入的数据
sheet.write(0,keys.index(k),k) # 写入数据
for i in persons:
for k in keys:
sheet.write(1 + persons.index(i),keys.index(k),label = i[k])
# 保存至文件
work.save("test.xls")

常用模块之 re shutil configparser hashlib xldt和xlwd的更多相关文章

  1. Python常用模块os & sys & shutil模块

    OS模块 import os ''' os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录: ...

  2. 函数和常用模块【day06】:hashlib模块(十三)

    本节内容 1.简述 2.加密 3.sha1加密 4.sha256加密 5.sha384加密 6.sha512加密 7.hmac加密 一.简述 我们写程序中,经常需要对字符串进行MD5加密,python ...

  3. 20、Python常用模块sys、random、hashlib、logging

    一.sys运行时环境模块 sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境. 用法: sys.argv:命令行参数List,第一个元素是程序本身 ...

  4. 常用模块二(hashlib、configparser、logging)

    阅读目录 常用模块二 hashlib模块 configparse模块 logging模块   常用模块二 返回顶部 hashlib模块 Python的hashlib提供了常见的摘要算法,如MD5,SH ...

  5. Python常用模块——目录

    Python常用模块学习 Python模块和包 Python常用模块time & datetime &random 模块 Python常用模块os & sys & sh ...

  6. Python3基础(5)常用模块:time、datetime、random、os、sys、shutil、shelve、xml处理、ConfigParser、hashlib、re

    ---------------个人学习笔记--------------- ----------------本文作者吴疆-------------- ------点击此处链接至博客园原文------ 1 ...

  7. python笔记-7(shutil/json/pickle/shelve/xml/configparser/hashlib模块)

    一.shutil模块--高级的文件.文件夹.压缩包处理模块 1.通过句柄复制内容 shutil.copyfileobj(f1,f2)对文件的复制(通过句柄fdst/fsrc复制文件内容) 源码: Le ...

  8. python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则

    python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib  subprocess ...

  9. 常用模块(hashlib,configparser,logging)

    常用模块(hashlib,configparser,logging) hashlib hashlib 摘要算法的模块md5 sha1 sha256 sha512摘要的过程 不可逆能做的事:文件的一致性 ...

随机推荐

  1. 织梦通过 phpmyadmin 导出的数据,再次导入的时候报错

    错误提示: #1291 – Column 'nature' has duplicated value '婆婆妈妈' in SET SQL 查询: -- -- 导出表中的数据 `dede_member_ ...

  2. SpringBoot | 第二十一章:异步开发之异步调用

    前言 上一章节,我们知道了如何进行异步请求的处理.除了异步请求,一般上我们用的比较多的应该是异步调用.通常在开发过程中,会遇到一个方法是和实际业务无关的,没有紧密性的.比如记录日志信息等业务.这个时候 ...

  3. <邮件的反垃圾反病毒>

    本章——发送接收邮件的工具为雷鸟 安装 # yum install dovecot-mysql.x86_64 dovecot.x86_64 -y 编辑文件 vim 10-mail.conf mail_ ...

  4. Department Highest Salary

    The Employee table holds all employees. Every employee has an Id, a salary, and there is also a colu ...

  5. POS开发问题 - 跳转页面更新,返回还原旧数据

    问题描述:由于需求的需要,路由需要加上缓存 <keep-alive> ,还要实现跳转就初始化,返回就还原的需求.意思就是:页面 A 跳转到页面 B ,页面 B 要初始化数据,但是 页面 B ...

  6. SqlServer Alwayson主副本图标显示问号的原因

    搭建完alwayson后,登录辅助副本服务器,查看alwayson可用性副本列表,看到主副本前面显示了一个问号,这里借用网上一张图片做展示: 在显示问号的主副本上右键属性查看,“角色”一栏中,显示的是 ...

  7. sqlserver锁表、解锁、查看销表

    锁定数据库的一个表 代码如下 复制代码 SELECT * FROM table WITH (HOLDLOCK) 注意: 锁定数据库的一个表的区别 代码如下 复制代码 SELECT * FROM tab ...

  8. thinkphp分页+条件查询

    最近项目上面有一个带条件查询的分页列表,一开始form用的post,点击第二页就没有跳转成功,原因是分页是get请求,post数据链接到其他页面就会被清除. 解决办法: 1.form表单method= ...

  9. <已解决> Eclipse启动失败

    参考:http://stackoverflow.com/questions/15404964/starting-eclipse-results-in-failed-to-create-java-vir ...

  10. 【BZOJ1076】[SCOI2008] 奖励关(状压DP)

    点此看题面 大致题意:总共有\(n\)个宝物和\(k\)个回合,每个回合系统将随机抛出一个宝物(抛出每个宝物的概率皆为\(1/n\)),吃掉一个宝物可以获得一定的积分(积分可能为负),而吃掉某个宝物有 ...