os模块
 
os模块对于目录,文件路径常用的模块
os模块中常见的方法:
os.getcwd()获取当前执行命令所在目录
 
os.path.isfil()判断是否t文件、os.path.isdir()判断是否目录
 
判断是否为目录
 
os.path.exists()判断文件或目录是否存在
 
os/.listdir(dirname) 列出指定目录下的目录或文件
 
os.path.split(name)分割文件名与目录
 
os.path.join(path,name)连接目录与文件名或目录
 
os.mkdir(dir)创建一个目录
 
os.rename(old,new)更改目录名称
======================================================================
xlrd模块
xlrd模块
1xlrd是可以用于读取excel表格数据(不支持写作操作,写作操作需要xlwt模块实现)
2支持xlsx和xls格式的excel表格(不支持csv文件。csv文件可以用python自带的csv模块操作)
3模块安装方式;pip3 install xlid
4模块导入方式:import xlrd
 
一,在dos中安装xlid
pip install xlid
pip3 install xlid
 
pip uninstall xlid 下载xlid
pip install xlid==1.2.0 安装版本
 
============================================================================
dos 中
win +r 输入cmd
 
 
============================================================================
 
pytharm中安装xlid模块1.2.0版本
 
二,导入模块;
import xlid
三,打开文件;
1,创建1234。xlsx.文件
2,编辑文件
(2)data.xlsx中的函数open_workbook
data = xlrd.open_workbook("data.xlsx")
单元格中数据类型:
python获取单元格中数据类型后,打印出来对并不是数据类型,而是用不同对数字映射对应对数据类型;
数据类型和数字对映射关系如下:
(3)
 0 empty, # 
1 string(text),  文本
 2 number,   号
 3 date,     时间
#4 boolean,   布尔值
 5 error,    错误
#6 blank(空白表格)
 
1,获取sheet;
获取所有sheet名字:data.sheet_names()
 
通过sheet名查找:data.sheet_by_name("test”)
 
通过索引查找:data.sheet_by_index(3
 
2,获取sheet汇总数据“;
获取sheet名:sheet.name
获取总行数:sheet.nrows
获取总列数:sheet.ncols
 
 3、单元格批量读取:
    a)行操作:
sheet.row_values(0)  # 获取第一行所有内容,合并单元格,首行显示值,其它为空。
sheet.row(0)           # 获取单元格值类型和内容
sheet.row_types(0)   # 获取单元格数据类型
 
4,表操作
sheet.row_values(0, 6, 10)   # 取第1行,第6~10列(不含第10表)
sheet.col_values(0, 0, 5)    # 取第1列,第0~5行(不含第5行)
sheet.row_slice(2, 0, 2)     # 获取单元格值类型和内容
sheet.row_types(1, 0, 2)   # 获取单元格数据类型
import xlrd
data = xlrd.open_workbook("d:\\bao\\info.xlsx")
sheet = data.sheets()[0]
print (sheet.row_values(1,2,4))# 取第1行,第6~10列(不含第10行)
#备注行数从0开始算,第一个数表示行数,第二个数表示开始列,第三个数表示结束列
 
print (sheet.col_values(0,0,3))  # 取第1列,第0~5行(不含第5行)
#备注列数从0开始算,第一个数表示列数,第二个数表示开始行,第三个数表示结束行
 
print (sheet.row_slice(2,0,2))           # 获取单元格值类型和内容
#备注列数从0开始算,第一个数表示3行,第二个数表示开始列,第三个数表示结束列
 
5,特定单元格读取:
1,获取单元格值:
第一个数表示行数,第二个数表示列数(都是0开始算)
b) 获取单元格类型:
6、案例场景
data = xlrd.open_workbook("D:\\bao\\info.xlsx")
sheet = data.sheets()[0]
print (sheet.nrows)           #获取该sheet中的有效行数
print (sheet.row(0))          #返回由该行中所有的单元格对象组成的列表
print (sheet.row_slice(0))    #默认返回由该行中所有的单元格对象组成的列表
print (sheet.row_values(0,1)) #默认返回由该行中所有单元格的数据组成的列表
print (sheet.row_len(0))      #索引值为0的行中有效单元格有几个
7、获取 表格中第一列所有的数据(for  循环)
import xlrd
book = xlrd.open_workbook("d:\\bao\\info.xlsx")
sheet = book.sheets()[0]
#通过for循环遍历取出excel表中第一列所有的数据
for i in range(sheet.nrows):
    print (sheet.row_values(i)[0])
=================================================================
re模块:
正则匹配:使用re模块实现
1、什么正则表达式?
正则表达式是一种对字符和特殊字符操作的一种逻辑公式,从特定的字符中,用正则表达字符串来过滤的逻辑。
基本介绍:
(1)正则表达式是一种文本模式;
(2)帮助我们检查字符是否与某种模式匹配
(3)re模块使python语言拥有全部的真正表达式功能,从python1.5版本起增加了re模块
2、正则表达式作用?
(1)快速高效的查找和分析字符串  比对字符,也叫模式匹配;具有查找,比对,匹配,替换,插入,添加,删除等能力
案例一:把一个字符中的所有数字匹配出来,\d  findall
案例二:编写爬虫收集数据,首先得到网页源码,(比如html),要提取有效数据(比如img字符),使用正则匹配出来;
(2)实现一个编译查找,一般在日志处理文件处理时用的多
3、认识我们正则表达式中特殊元素?
re模块数量词匹配:
 预定义字符集匹配: 
\d:数字0-9
 \D:非数字 
\s:空白字符 
\n:换行符
\w    匹配字母数字
\W    匹配非字母数字
^:表示的匹配字符以什么开头 
$:表示的匹配字符以什么结尾 
*:匹配*前面的字符0次或n次 eg:ab  (* 能匹配a 匹配ab 匹配abb )
+:匹配+前面的字符1次或n次 
?:匹配?前面的字符0次或1次 
{m}:匹配前一个字符m次 
{m,n}:匹配前一个字符m到n次(包括n次),m或n可以省略,mn都是 
#1、findall # 从第一个字符开始查找,找到全部相关匹配为止,找不到返回一个空列表[] # 
#2、match
#从第一个字符开始匹配,如果第一个字符不是要匹配的类型、则匹配失败得到一个none值
 注意:如果规则带了'+',则匹配1次或者多次,无'+'只匹配一次
3、compile # 编译模式生成对象,找到全部相关匹配为止,找不到返回一个列表[]
 4、search
#从第一个字符开始查找、一找到就返回第一个字符串,找到就不往下找,找不到则报错
 
案例1:findall # 从第一个字符开始查找,找到全部相关匹配为止,找不到返回一个空列表[] #
 
findall 查找所有的字符
import re
f="adminadminabcdef"
s=re.findall("a",f)
print(s)
 
 
案例2:查看不存在的字符,则返回空列表
import re
f="adminadminabcdef"
s=re.findall("s",f)
print(s)
 
2、案例:match
 
从第一个字符开始匹配,如果第一个字符不是要匹配的类型、则匹配失败得到一个none值
 
案例1:
import re
f="adminadminabcdef"
s=re.match("s",f)
print(s) #不存在的数据则返回None
 
案例2:
import re
f="adminadminabcdef"
s=re.match("a",f)
print(s) 结果:<re.Match object; span=(0, 1), match='a'> 对象
 
案例三
import re
f="adminadminabcdef"
s=re.match("a",f)
print(s.span()) 结果:(0, 1)
 
 
3、search 
#从第一个字符开始查找、一找到就返回第一个字符串,找到就不往下找,找不到则报错
案例1:
import re
f="adminadminabcdef"
s=re.search("i",f)
print(s.span())
 
案例2
import re
f="adminadminabcdef"
s=re.search("s",f)
print(s)
 
不存在的字符则返回None
 
group       以str 形式返回对象中match的元素
start   返回开始位置
end   返回结束位置
span   以tuple 形式返回范围
===========================================================
场景一:\d  :数字0-9
import re
a="123456abcdefg"
s=re.findall("\d",a)
print(s)
结果:['1', '2', '3', '4', '5', '6']
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
场景二: \D:非数字 
import re
a="123456abcdefg"
s=re.findall("\D",a)
print(s)
  • 1.
  • 2.
  • 3.
  • 4.
场景三:\s 空白字符
import re
a="123456 abcd efg"
s=re.findall("\s",a)
print(s) #[' ', ' ']
  • 1.
  • 2.
  • 3.
  • 4.
场景四:\n  换行符
import re
a="1234\n56 ab\ncd efg"
s=re.findall("\n",a)
print(s)
  • 1.
  • 2.
  • 3.
  • 4.
=====================================================
场景一:符号^ 表示的匹配字符以什么开头
import re
a="1234\n56 ab\ncd efg"
s=re.match("^1",a)
print(s)
  • 1.
  • 2.
  • 3.
  • 4.
 
场景二:符号$ 表示的匹配字符以什么结尾
import re
a="123456abdefg"
s=re.search("g$",a)
print(s)
  • 1.
  • 2.
  • 3.
  • 4.
场景三:符号*   表示的匹配*前面字符0次或n次
import re
a="123456abdeadfgabblllabbbbbb"
s=re.findall("ab*",a)
print(s)
结果:['ab', 'a', 'abb', 'abbbbbb']
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
 
场景四:符号+   表示的匹配+前面字符1次或n次
import re
a="123456abdeadfgabblllabbbbbb"
s=re.findall("ab+",a)
print(s) 结果:['ab', 'abb', 'abbbbbb']
  • 1.
  • 2.
  • 3.
  • 4.
 
场景五:符号?   表示的匹配?前面字符0次或1次
import re
a="123456abdeadfgabblllabbbbbb"
s=re.findall("ab?",a)
print(s)
  • 1.
  • 2.
  • 3.
  • 4.
 
场景六:{m}   表示的匹配前一个字符m次
import re
a="123456abdeadfgabblllabbbbbb"
s=re.findall("ab{1}",a)
print(s) #['ab', 'ab', 'ab']
  • 1.
  • 2.
  • 3.
  • 4.
 
场景:七  符号{n,m}   表示的匹配前一个字符m到n次  (包括n次 )
import re
a="123456aaabdeadfgaabblllabbbbbbkabbbb"
s=re.findall("ab{1,4}",a)
print(s) 结果:['ab', 'abb', 'abbbb', 'abbbb']
  • 1.
  • 2.
  • 3.
  • 4.
=====================================================
sub替换
import re
a="123456aaabdeadfgaabblllabbbbbbkabbbb"
s=re.sub("a"," 我在中国",a)
print(s)
结果:123456 我在中国 我在中国 我在中国bde 我在中国dfg 我在中国 我在中国
======================================================================
标志匹配符
 re.I    忽略大小写(常用)
 re.L    做本地化识别(locale-aware)匹配(少用)
re.M    多行匹配,能匹配到换行\n,影响 ^ 和 $
 re.S    使 . 匹配包括换行在内的所有字符
re.U    根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X    该标志通过给予更灵活的格式,以便将正则表达式写得更易于理解。
备注:(1)re.后面的字符都是大写
案例: re.I    忽略大小写(常用)
 
import re
a="123456aaabdeadAAfgaabblllAAAbbAAAbbbbkabbbb"
s=re.findall("a",a,flags=re.I)
print(s)
 
案例:re.M    多行匹配,能匹配到换行\n,影响 ^ 和 $
 
import re
a="123456aaabdeadAAfgsssaa\nblllA\nAAbbAAAbbb\nbkabbbbHHHHHHHSSSs"
print(a)
s=re.findall("s",a,flags=re.M)
print(s)