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. 关于js框架 dwz 与 yii的的分页 以及筛选的结合

    此为jicheng1014 原创....地址为http://jicheng1014.cnblogs.com dwz是一个不错的前端框架  但是 注意   所有的后端   都是要自己写的 常见的应用是 ...

  2. mfc 列表控件

    经常使用的mfc控件:list control,记录下   首先将list control拖入到对话框中,然后命名ID,通过类向导,类型为control,控件变量名(m_showlist),  vie ...

  3. springmvc之Hello World及常用注解

    步骤: 加入jar包 在web.xml 中配置DispacherServlet 加入SpringMVC 配置文件springmvc.xml 编写请求处理器(action/controller) 编写视 ...

  4. kickstart2019 round_A B. Parcels

    思路: 利用了曼哈顿距离和切比雪夫距离之间的转化. 参考: https://blog.csdn.net/Dylan_Frank/article/details/88985444 https://www ...

  5. a标签常用跳转

    1.a标签跳转qq <a href="http://wpa.qq.com/msgrd?v=3&uin=123456789&site=qq&menu=yes&qu ...

  6. 超链接显示网站 A,访问后进入网站 B

    #前端黑魔法# 出一个思考题:如何用最少的字符实现下图效果.即超链接显示网站 A,访问后进入网站 B. 当然这个是上古时代的黑魔法了,稍懂前端的都知道原理.所以这里只问最短的实现~ 一个简单的演示:( ...

  7. Sometimes it takes going through something so awful to realize the beauty that is out there in this world.

    Sometimes it takes going through something so awful to realize the beauty that is out there in this ...

  8. display:table的几个用法(元素平分宽度,垂直居中)

    DIV+CSS的布局已经让表格布局几乎很少用到,除非表格语义性很强的情况. display:table解决了一部分需要使用表格特性但又不需要表格语义的情况, 尤其是DIV+CSS很不方便解决的问题,比 ...

  9. 【转载】LCT题单

    本篇博客的题单转载自FlashHu大佬的博客:LCT总结--应用篇(附题单)(LCT). 关于\(LCT\)可以查看这篇博客:\(LCT\)入门. 这里面有些题解的链接是空链接,尚未补全. 维护链信息 ...

  10. fopen, fdopen, freopen - 打开流

    SYNOPSIS (总览) #include <stdio.h> FILE *fopen(const char *path, const char *mode); FILE *fdopen ...