Python第一阶段学习总结

【第16天】Python第一阶段学习总结

2021/10/11

一. 练习

  1. 将100以内的素数输出到一个文件中
def is_prime(num: int) -> bool:
    """
    判断一个正整数是不是质数
    :param num: 正整数
    :return: 质数返回True,否则返回False
    """
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            return False
    return True


with open('prmie.txt', 'w') as file:
    for n in range(2, 100):
        if is_prime(n):
            file.write(f'{n}\n')

二. 对象的序列化和反序列化

1. 序列化(serialization)

  1. 把一个对象(字典、列表等)变成字符串(str)或者字节串(bytes-二进制数据)

2. 反序列化(deserialization)

  1. 从字节串或字符串中还原一个对象(字典、列表等)

3. JSON和Pickle的序列化操作

  1. Python的标准库有一个json/pickle模块,可以支持我们做序列化和反序列化操作

  2. Json

    1. JSON —> JavaScript Object Notation —> JavaScript语言创建对象的字面量语法
    let person = {
        name: '骆昊'
        age: 41,
        sex: True
    }
    

    这种数据格式也非常适合在两个系统(尤其是异构的系统)传输数据(因为它是纯文本),所以今天当我们说到JSON,更多的时候是把它当成一种数据交换格式

    1. Python中的字典跟JSON格式非常相似,所以我们可以通过将字典转成JSON格式的字符串,就可以写入文件中实现持久化。

    2. JSON序列化通用,所有编程语言都可读;字符串(txt文件

    3. json.dumps/json.dump

      1. json.dumps(变量, file=文件名):分两步,dumps先把对象变成字符串,然后再往file里写
        1. content = json.dumps(变量)
        2. file.write(content)
      2. json.dump(变量,fp=文件名):将dumps的两步合为一步
      import json
      
      person = {
          'name': '浩宇',
          'age': 25,
          'sex': True,
          'friends': ['赵云', '马超', '辛弃疾'],
          'car': {
              'brand': 'QQ',
              'max_speed': 120
          }
      }
      with open('person.txt', 'w') as file:
          # 序列化
          
          # content = json.dumps(person)
          # file.write(content)   # dumps先把对象变字符串
          
          # print(json.dumps(person), file=file)
          
          json.dump(person, fp=file)  # 可以指定参数
      
  3. Pickle序列化只有Python能读出来:字节串(dat文件)

    1. pickle.dumps/pickle.dump
      1. pickle.dumps(变量):分两步,dumps先把对象变成字节串,然后再往file里写
        1. content = pickle.dumps(变量, file=文件名)
        2. file.write(content)
      2. pickle.dump(变量,file=文件名):将dumps的两步合为一步
    import pickle
    
    person = {
        'name': '浩宇',
        'age': 25,
        'sex': True,
        'friends': ['赵云', '马超', '辛弃疾'],
        'car': {
            'brand': 'QQ',
            'max_speed': 120
        }
    }
    with open('person.dat', 'wb') as file:
        # 序列化
        # file.write(pickle.dumps(person))   # dumps先把对象变字符串
        
        # print(pickle.dumps(person), file=file)
        
        pickle.dump(person, file=file)  #
    

4. JSON和Pickle的反序列化操作

  1. JSON:读取文件中的JSON格式数据还原成字典对象

    1. json.load(fp=文件名)
    2. json.loads(变量):变量是读文件获取到的字符串
    import json
    
    with open('person.txt') as file:
        # 反序列化:将字符串还原成(字典)
        # content = file.read()
        # obj = json.loads(content)
        # print(obj, type(obj))
        
        # 从文件中读取字符串还原成字典对象
        obj = json.load(fp=file)
        print(obj)
        print(type(obj))
    
  2. Pickle

    1. pickle.load(文件名)
    2. pickle.loads(变量):变量是读文件获取到的字节串
    import pickle
    
    with open('person.dat', 'rb') as file:
        # 反序列化:将字符串(或字节串)还原成(字典)
        # content = file.read()
        # obj = pickle.loads(content)
        # print(obj, type(obj))
        
        obj = pickle.load(file)
        print(obj)
        print(type(obj))
    

三. 联网获取数据

1. URL

  1. URL —> 网址 —> 统一资源定位符 —> 能够唯一标识一个(网络)资源的符号

协议://用户名:口令@域名或者IP地址端:端口/路径1/路径2/资源名称

https://www.baidu.com:443/index.html

https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png

  1. URI —> 统一资源标识符 —> URL + URN
  2. 协议 —> 规范和标准 —> 网络协议 —> 通过网站进行通信的双方要遵守的规范和标准
  3. HTTP(S) —> 超文本传输协议(S:安全环境) —> 请求响应式协议

2. 三方库

  1. 可以使用Python的包管理工具 pip 来安装和管理三方库以及三方工具
  2. 修改 pip 下载源为国内的镜像网站(推荐使用豆瓣网的镜像)
    pip config set global.index-url https://pypi.doubanio.com/simple
  3. 查找三方库:pip serach requests
    安装三方库:pip install requests
    卸载三方库:pip uninstall requests
    更新三方库:pip install -U requests

3. 三方库requests的使用

  1. 使用三方库 requests 可以非常方便的实现通过URL访问网络资源的操作

  2. requests.get(url=‘网址’, params={参数1、参数2、…}):get函数会通过你指定的URL向web服务器发起一个请求,该指数会返回一个响应对象

  3. 响应对象.json():url请求返回的是一个json文件,用.json转换成字典

  4. json.loads(响应对象**.text**):字符串文件转回成字典

    import json
    import requests
    
    # 获取天气预报
    resp = requests.get(
        url='http://apis.juhe.cn/simpleWeather/query',
        params={
            'city': '成都',
            'key': 'eddaf86c59386a945bcff5b4bc49e739'
        }
    )
    
    weather_dict = json.loads(resp.text)
    print(weather_dict['result']['realtime'])
    futures = weather_dict['result']['future']
    
    
    # 获取手机号归属地
    
    cell_info = requests.get(
        url='http://apis.juhe.cn/mobile/get',
        params={
            'phone': '15877902802',
            'key': '9413c4d1f3254dc3dbac4def8d81933c'
        }
    )
    
    cell_dict = json.loads(cell_info.text)   # 字符串文件转回成字典
    print(cell_dict['result'])
    print(cell_dict['result']['province'], cell_dict['result']['city'])
    

四. Excel文件操作

  1. import openpyxl
  2. 创建一个Excel工作簿:workbook = openpyxl.Workbook()
  3. 获取默认的工作表:sheet = workbook.active
  4. 添加表头:sheet.append(列表、元组、字典等)
  5. 保存工作簿:workbook.save(‘文件名.xlsx’)
import openpyxl

# 创建一个Excel工作簿
workbook = openpyxl.Workbook()
# 获取默认的工作表
sheet = workbook.active
# 添加表头
sheet.append(('姓名', '语文', '数学', '英语'))
sheet.append(('骆昊', '50', '60', '70'))
sheet.append(('王大锤', '85', '96', '70'))
sheet.append(('浩宇', '100', '100', '100'))
sheet.cell(5, 1, '张三')  # 第5行第1列
# 保存工作簿
workbook.save('学生考试成绩.xlsx')
from datetime import datetime
import requests
import json
import openpyxl

# 每天从头条新闻获取100条新闻,并创建一个Excel表保存数据

workbook = openpyxl.Workbook()
sheet = workbook.active
sheet.append(('title', 'url', 'source'))
for page in range(1, 6):
    resp = requests.get(
        url='https://api.tianapi.com/topnews/index',
        params={
            'key': 'e8c5524dd2a365f20908ced735f8e480',
            'page': page,
            'num': 20
        }
    )
    result = resp.json()   # url请求返回的是一个json文件,用.json转换成字典
    # print(result)
    for news_dict in result['newslist']:
        sheet.append((news_dict['title'], news_dict['url'], news_dict['source']))
current = datetime.now()
workbook.save(f'新闻_{current.year}{current.month:0>2d}{current.day:0>2d}.xlsx')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值