Day11-二分法&数据持久化

在这里插入图片描述

二分法(二分查找)

  • 概念 - 二分法的本质是对半取元素,判断要查找的元素是否在对应区间里

  • 限制 - 所查找的容器必须先排好序

    # 有二分法查找出目标值
    list1 = [0, 5, 10, 60, 90]
    target = 60
    left = 0
    right = len(list1) - 1
    
    while left <= right:
      mid = (left + right) // 2
      if list1[mid] == target:
        print(mid)
        break
      elif list1[mid] > target:
        right = mid - 1
      else:
        left = mid + 1
    else:
      print('该元素不在列表中!')
    
  • 使用二分法时要注意***时空复杂度(时间、空间)***:

    • 时间复杂度 - 程序执行花费的时间
    • 空间复杂度 - 程序执行花费的内存
    • 两者要保持平衡
  • 二分法变形 - 容器中元素先升序再降序

    • 使用两个二分法来做

数据持久化

  • 概念 - 将数据从瞬时状态转化为持久状态

  • 两种文件形式 - 文本文件 & 表格文件

  • Python操作文件流程:

    操作文本文件: 新建(重命名) -> 打开 -> 写数据 -> 保存关闭 (写)

    ​ 打开 -> 读数据 -> 关闭 (读)

    操作表格文件: 新建 -> 打开 -> 写数据 -> 保存、关闭、重命名

    ​ 打开 -> 读数据 -> 关闭

  • 文件操作形式:

    a. 以什么形式操作**(读 / 写)**

    # r - 只读,文件若不存在会报错
    # w - 只写,文件不存在会创建一个新的,若存在则先清空再创建
    # a - 追加,文件不存在会创建一个新的,若存在则继续添加内容
    
  • b. 以什么数据类型操作文件:

    # t - 字符串形式 (t可以不写,为默认值,r = rt、tr)
    # b - 二进制形式 (一般计算机中储存的数据都为二进制形式存在,如图片、音频、视频等)
    
  • 如何使用文件操作形式:

    • '以什么形式操作'以什么数据类型操作 ’ 中各选一种搭配
    • 例如 - rb、rt、tr、br等

文件读写操作

  • 读操作通常有四个参数

    # 参数1 - 文件名、文件路径
    # 参数2 - 文件操作模式
    # 参数3 - 编码方式,encoding = 'utf-8'
    # 参数4 - 换行方式,newline = ''(读操作时不需要指定)
    
    # windows: \r\n (会出现空一行打印一排的情况)
    # mac: \r
    # linux: \n
    # r 会将鼠标光标移动到下一行行首
    
  • 文件路径分为两种

    # 相对路径 - 以当前文件为参照物,查找另一个文件相对其的位置
    # .表示当前目录
    # ..表示返回上一级
    # /两个文件夹之间及文件夹和文件之间的间隔符号
    # 绝对路径 - 文件准确的位置,放在xx磁盘下的xx文件夹
    # D:\\user\word\test.txt
    
  • 以文件对象的形式打开已存在文件

    file = open(r'test.txt', 'r', encoding='utf-8')
    print(file)
    
  • 读操作

    # read、readline、readlines
    # read: 以字符串形式一次性将文件中的内容全读出来
    # readline: 每次只读一行,结果为字符串类型
    # readlines: 一次性将所有行读出来,结果为列表,文件的每一行信息为一个元素
    
  • 关闭文件

    # close: 关闭文件
    
  • 文件读写示例

    # 写入文件
    file = open('古诗.txt', 'w', encoding='utf-8', newline='')
    # write: 向文件写入内容
    str1 = '静夜思\n唐 李白\n床前明月光\n疑是地上霜'
    file.write(str1)
    file.close()
    
    # 追加内容
    file = open('古诗.txt', 'a', encoding='utf-8', newline='')
    # append: 向文件追加内容
    str1 = '\n举头望明月\n低头思故乡'
    file.write(str1)
    file.close()
    
    # 读取内容
    # 读操作和写操作编码要保持一致
    file = open('古诗.txt', 'r', encoding='utf-8')
    print(file.read())
    file.close()
    
  • with的用法

    # with预定义了close方法,会在操作后直接执行清理操作,关闭文件
    with open('古诗.txt', 'r', encoding='utf-8', newline=''):
      result = file.read()
      print(result)
    
    print(file.read())  # ValueError: I/O operation on closed file.  
    
  • eval - 将字符串序列化

    # eval: 将字符串序列化, eval中必须写长度非0的字符串
    print(eval('1') + 2)  # 打印结果为3
    print('[1, 2, 3, 4, 5]'[0])  # 打印结果为[
    print(eval('[1, 2, 3, 4, 5]')[0])  # 打印结果为1
    
python读写图片与视频
  • python读取图片和视频,打印结果为二进制字节码

    # b'xxxxxx' 二进制字节码
    # 读取图片
    file = open('photo1.jpg', 'rb')
    result = file.read()
    file.close()
    print(result)
    
    # 将图片用二进制写回去
    file = open('photo2.jpg', 'wb')
    file.write(result)
    file.close()
    
    # 读取和写入视频
    file = open('MarkDown为什么会这么流行.mp4', 'rb')
    result1 = file.read()
    file.close()
    print(result1)
    
    file = open('MarkDown为什么会这么流行1.mp4', 'wb')
    file.write(result1)
    file.close()
    
CSV文件的读写
# CSV文件中的数据是以表格形式显示的
import csv
csvfile = open('学生成绩.CSV', 'w', encoding='utf-8')
# 先写列明
# 使用CSV模块提供的writer方法进行文件写入
myWrite = csv.writer(csvfile)
myWrite.writerow(['编号', '姓名', '年龄', '专业'])

# writerow() - 单行写入,writerow中传递一个列表,列表表示一行
# 列表中的一个元素代表一个单元格的内容
myWriterows(
  [
  		['python001', '张三', '18', '计算机科学与技术'],
    	['python002', '李四', '18', '计算机科学与技术'],
    	['python003', '王五', '18', '计算机科学与技术'],
	]
)

# writerows() - 多行写入,writerows中传递一个列表,列表中一个元素代表一行内容
csvfile.close()

# 读取写入的内容
file = open('学生成绩.CSV', 'r', encoding='utf-8')
# csv.reader得到一个可迭代对象
data = csv.reader(file)
for i in data:
  print(i)
file.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值