第一次补课--第七节课后

csv写入与读取

1. 写入文件

(1)通过创立writer对象,应用列表的形式,次要用到两个办法:一个是writerow,每次写入一行;一个是writerows,每次写入多行,只需写入一次

import csvimport pandas as pd# 第一种写入形式 writerowperson =[    ('你猜', 18, 180), ('不猜', 20, 182), ('我猜', 22, 184),]# 表头header = ('name', 'age', 'height')# w-->写 如果office关上乱码了 须要改成utf-8-sig newline-->换行with open('person.csv', 'w', encoding='utf-8', newline='') as file_obj:    writer = csv.writer(file_obj)    writer.writerow(header)  # 把表头写进去    for i in person:        writer.writerow(i)  # 把内容写进去
# 第二种写入形式 writerowsperson =[    ('你猜', 18, 180), ('不猜', 20, 182), ('我猜', 22, 184),]header = ('name', 'age', 'height')with open('person2.csv', 'w', encoding='utf-8', newline='') as file_obj:    writer = csv.writer(file_obj)    writer.writerow(header)  # 把表头写进去    writer.writerows(person)    # 把内容写进去

(2)通过创立DictWriter对象 即应用字典的形式写入数据

# 第三种写入形式--字典person = [    {'name': '你在', 'age': 18, 'height': 180},    {'name': 'yyy', 'age': 20, 'height': 182},    {'name': 'zzz', 'age': 22, 'height': 184}]header = ('name', 'age', 'height')with open('dict_person.csv', 'w', encoding='utf-8', newline='') as f:    DictWrite = csv.DictWriter(f, header)    DictWrite.writeheader()  # 写入表头    DictWrite.writerows(person)  # 写入内容

附注:

# 不必with就要手动敞开:close()f_obj = open('dict_person2.csv', 'w', encoding='utf-8', newline='')DictWrite = csv.DictWriter(f_obj, header)# 写入表头DictWrite.writeheader()DictWrite.writerows(person)f_obj.close()

2.读取文件

(1)通过reader()读取到的每一个数据是一个列表,即能够通过下标的形式获取具体某一个值

# 第一种读取形式 读取进去的元素是列表with open('person.csv', 'r', encoding='utf-8') as g:    r = csv.reader(g)    # print(r, type(r))    for i in r:        print(i[0], i[1], i[2])

(2)通过DictReader()读取到的数据是一个字典,即能够通过key的形式获取数据

with open('person2.csv', 'r', encoding='utf-8') as h:    r = csv.DictReader(h)    # print(type(r), r)    for i in r:        print(i['name'], i['age'], i['height'])

面向对象

# 类属性 实例属性 类办法 实例办法class A:    # 类属性:间接在类中定义的属性    # 特点: 1.能够通过类对象和实例对象拜访    # 2. 能够通过类对象批改 但不能通过实例对象批改(增加实例对象属性,而不是类属性)    number = 99    def __init__(self):        # name 是实例属性 通过self.xxx的都是实例属性        # self 是指对象自身        # 实例对象能够拜访和批改实例属性 类对象不能拜访实例属性        self.name = 'python'    # 实例办法:是在类中定义的 第一个参数是self    def test(self):        print('实例办法')    # 类办法:应用@classmethod润饰的办法是类办法 第一个参数是cls    # 类办法能够通过类对象调用 也能够通过实例对象调用    @classmethod    def test2(cls):        print('类办法')print(A.number)  # 调用类属性# a是一个实例对象a = A()# 通过实例对象增加的属性就是实例属性a.number = 1314print(a.number)  # 实例属性print(A.number)     # 类属性print(a.name)  # 实例属性能够通过实例对象调用print(A.name)  # 报错a.name = 'hello'print(a.name)  # 实例属性能够通过实例对象批改a.test()  # 调用test办法A.test()  # 报错A.test(a)   # 等价于a.test() 类对象 须要手动传递?A.test2()a.test2()

案例--爬取天气

指标:爬取某城市7天的天气状况(日期、天气、温度、风力)
实现步骤
1.向指标url发动申请 获取网页源代码(html文件)
2.页面剖析
(1)在网页源代码种匹配ul标签(正则)
(2)持续解析ul标签中的li标签数据(正则)
3.通过csv保留数据

import requestsimport reimport csv# 指标urlurl = 'http://www.weather.com.cn/weather/101110101.shtml'headers = {    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',}# 1.向指标url发动申请 获取网页源代码res = requests.get(url, headers=headers)html = res.content.decode('utf-8')# print(res.content.decode('utf-8'))  # 全部内容# 2.解析数据# 在网页源代码中匹配ul标签# re.S 换行匹配ul = re.match(r'.*?(<ul class="t clearfix">.*?</ul>).*', html, re.S)# ul_data1 = ul.group()  # 全部内容# print(ul_data1)ul_data2 = ul.group(1)# print(ul_data2)# 在网页源代码中匹配li标签lis = re.findall(r'.*?(<li class=".*?">.*?</li>).*?', ul_data2, re.S)# print(lis)# 最初有?问号的话 7天信息都会示意进去 ;没有?问号的话 只有一天的信息示意进去# 贮存所有数据的大列表lst_data = []for li in lis:    # 贮存某一天数据的字典    li_dict = {}    # print(li)    # print('*' * 100)    pat = re.compile(r'.*?<h1>(.*?)</h1>.*?<p.*?>(.*?)</p>.*?<i>(.*?)</i>.*?<i>(.*?)</i>', re.S)    li_data = pat.match(li)    # print(li_data.group(1), end=' ')    # print(li_data.group(2), end=' ')    # print(li_data.group(3), end=' ')    # print(li_data.group(4), end=' ')    # print()    li_dict = {'日期': li_data.group(1), '天气': li_data.group(2), '温度': li_data.group(3), '风力': li_data.group(4)}    print(li_dict)    lst_data.append(li_dict)header = ['日期', '天气', '温度', '风力']with open('weather.csv', 'w', encoding='utf-8', newline='') as f:    w = csv.DictWriter(f, header)    w.writeheader()    w.writerows(lst_data)