爬虫笔记11:re模块常用方法、分组方法、CSV模块的读写

一、re模块常用方法
在这里插入图片描述
compile(pattern, flags=0)
这个用法是re模块的工厂法,用于将字符串形式的正则表达式编译为Pattern模式对象,可以实现更加效率的匹配。第二个参数flag是匹配模式 使用compile()完成一次转换后,再次使用该匹配模式的时候就不能进行转换了。经过compile()转换的正则表达式对象也能使用普通的re用法。

flags参数
在这里插入图片描述

search(pattern, string, flags=0)
在文本内查找,返回第一个匹配到的字符串。它的返回值类型和使用方法与match()是一样的,唯一的区别就是查找的位置不用固定在文本的开头。

findall(pattern, string, flags=0)
作为re模块的三大搜索函数之一,findall()和match()、search()的不同之处在于,前两者都是单值匹配,找到一个就忽略后面,直接返回不再查找了。而findall是全文查找,它的返回值是一个匹配到的字符串的列表。这个列表没有group()方法,没有start、end、span,更不是一个匹配对象,仅仅是个列表!如果一项都没有匹配到那么返回一个空列表。

split(pattern, string, maxsplit=0, flags=0)
re模块的split()方法和字符串的split()方法很相似,都是利用特定的字符去分割字符串。但是re模块的split()可以使用正则表达式,因此更灵活,更强大。
split有个参数maxsplit,用于指定分割的次数。

sub(pattern, repl, string, count=0, flags=0)
sub()方法类似字符串的replace()方法,用指定的内容替换匹配到的字符,可以指定替换次数。

二、分组功能
Python的re模块有一个分组功能。所谓的分组就是去已经匹配到的内容再筛选出需要的内容,相当于二次过滤。实现分组靠圆括号(),而获取分组的内容靠的是group()、groups(),其实前面我们已经展示过。re模块里的几个重要方法在分组上,有不同的表现形式,需要区别对待。
例如:

import re
s = 'apple price is $66,banana price is $55'
# 需求是匹配 $66 $55

result = re.search(r'.+(\$\d+).+(\$\d+)',s)
print(result.group())
print(result.group(1))
print(result.group(2))
print(result.group(0))
print(result.groups())

结果:
在这里插入图片描述
group()/group(0) 匹配整个分组
group(1) 获取第一个分组
group(2) 获取第二个分组
groups() 获取所有的分组(把分组的结果放到了一个元组里面)

三、模块的读写
1 、通过writer对象的 writerow、writerows方法

import csv

headers = ('name','age','height') # 只要能够遍历就可以,比如迭代器、可迭代对象等
persons = [
    ('青崖',18,180),
    ('少年梦',28,185),
    ('红苹果',38,170)
]
with open('persons.csv','w',encoding='utf-8') as file_obj:
    writer = csv.writer(file_obj)
    writer.writerow(headers)	#先把表头写进去
    for data in persons:
        writer.writerow(data)

结果:
在这里插入图片描述

import csv

headers = ('name','age','height') # 只要能够遍历就可以,比如迭代器、可迭代对象等
persons = [
    ('青崖',58,180),
    ('少年梦',28,185),
    ('红苹果',38,170)
]
with open('persons.csv','w',encoding='utf-8',newline='') as file_obj: #对比上面的结果可知,newline=''使得没有空行
    writer = csv.writer(file_obj)
    writer.writerow(headers)
    writer.writerows(persons)

结果:
在这里插入图片描述

如果通过excel打开csv文件是乱码,那就要把excel的编码方式设置为utf-8

2、通过DictWriter对象

import csv

headers = ('name','age','height')
persons = [
    {'name':'笔记本','age':18,'height':175},
    {'name':'张同学', 'age': 18,'height':175},
    {'name':'杨同学', 'age': 18,'height':175},
]
with open('persons.csv','w',encoding='utf-8',newline='') as file_obj:
    Dwriter = csv.DictWriter(file_obj,headers)
    Dwriter.writeheader()
    Dwriter.writerows(persons)

结果:(有问题)
在这里插入图片描述
3、csv的读取

import csv

headers = ('name','age','height')
persons = [
    {'name':'笔记本','age':18,'height':175},
    {'name':'张同学', 'age': 18,'height':175},
    {'name':'杨同学', 'age': 18,'height':175},
]
with open('persons.csv','w',encoding='utf-8',newline='') as file_obj:
    Dwriter = csv.DictWriter(file_obj,headers)
    Dwriter.writeheader()
    Dwriter.writerows(persons)

with open('persons.csv','r',encoding='utf-8',newline='') as file_obj:
    reader = csv.reader(file_obj)
    for x in reader:
        print(x)

结果:
在这里插入图片描述

import csv

headers = ('name','age','height')
persons = [
    {'name':'笔记本','age':18,'height':175},
    {'name':'张同学', 'age': 18,'height':175},
    {'name':'杨同学', 'age': 18,'height':175},
]
with open('persons.csv','w',encoding='utf-8',newline='') as file_obj:
    Dwriter = csv.DictWriter(file_obj,headers)
    Dwriter.writeheader()
    Dwriter.writerows(persons)

with open('persons.csv', 'r', encoding='utf-8', newline='') as file_obj:
    Dreader = csv.DictReader(file_obj)
    for x in Dreader:
        print(x)	#print(x['name'])

结果:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值