第八天

今日内容

了解:

  队列:先存进去的数据先取出来
  堆栈:先存进去的数据后取出来

一、集合:

  ======================================基本使用======================================
  1、用途:去重、关系运算。
              ps:其中集合去重无法保准顺序,并只能针对不可变元素去重。

  2、定义方式:在{,}内用逗号隔开多个元素,集合内元素的特征有三个
              (1)集合内元素必须是不可变元素
              (2)集合内元素不能重复
              (3)集合内元素无序

  3、常用操作+内置的方法:
              优先掌握的操作:
              1、长度len
              s1 = {1,2,3}
              print(len(s1))   # 3
              2、成员运算in和not in
              s1 = {1,2,3}
              print(3 in s1)       # True
              print(3 not in s1)   # False

              1、|并集(合集):两个集合并到一起
              2、&交集:取两个集合的共同部分
              3、-差集:一个集合减掉与另一个集合共同的部分
              4、^对称差集(交叉补集):求两个集合互相减,然后再并到一起
              5、==
              6、父集:>,>=  当一个集合完全包含了另外一个集合,该集合才能称为爹
              s1 = {1,2,3}
              s2 = {4,5,6}
              print(s1 >= s2)   # False
              print(s1.issuperset(s2))
              7、子集:<,<=
              print(s1 <= s2)   # False
              print(s1.issubset(s2))

              举例:
              pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
              linuxs={'wupeiqi','oldboy','gangdan'}

              list1 = pythons | linuxs   # {'egon', 'yuanhao', 'wupeiqi', 'oldboy', 'biubiu', 'gangdan', 'alex'}
              print(pythons.intersection(linuxs))
              print(pythons.intersection_update(linuxs))

              list2 = pythons & linuxs   # {'wupeiqi', 'gangdan'}
              print(pythons.union(linuxs))

              list3 = pythons - linuxs   # {'yuanhao', 'alex', 'egon', 'biubiu'}
              print(pythons.difference(linuxs))

              list4 = linuxs - pythons   # {'oldboy'}
              print(linuxs.difference(pythons))

              list5 = pythons ^ linuxs   # {'egon', 'oldboy', 'yuanhao', 'biubiu', 'alex'}
              print(pythons.symmetric_difference(linuxs))

              需要掌握的操作:
              s1 = {1,2,3}

              1、s1.update()
              s1.update({3,4,5})
              print(s1)    # {1, 2, 3, 4, 5}

              2、s1.add()
              s1.add(4)
              print(s1)      # {1, 2, 3, 4}

              3、删除
              3.1  remove(3)
              s1.remove(3)
              print(s1)       # {1, 2}
              3.2  pop()
              res =  s1.pop()   # 随机删除 返回删除的值
              print(s1)
              print(res)
              3.3  discard()
              s1.discard(444444)   # 删除不存在的元素不会报错
              print(s1)    # {1, 2, 3}
              3.4  clear()
              s1.clear()
              print(s1)      # set()

              4、copy
              res = s1.copy()
              print(res)      # {1, 2, 3}

              5、isdisjoint()
              s1 = {1,2,3}
              s2 = {4,5,6}
              print(s1.isdisjoint(s2))  # True

  ======================================该类型总结====================================
  存多个值

  无序

  集合类型本身是可变的,里面的元素是可迭代的(能被for循环)

二、文件处理

1、什么是文件

  文件时操作系统提供给用户或者应用程序操作硬盘的一种机制
  python中文件是对象
  Linux文件:一切设备都可以看成是文件
  文件的作用:把一些数据以文件的形式存储起来,文件由文件系统进行管理,当程序下一次执行的时候,通过文件系统快速找到对应的文件,而找到对应的数据,省时省力。

2、为何要用文件

  读写文件 ---> 存取硬盘
  应用程序:  open()
  操作系统:  打开文件
  计算机硬件:  硬盘空间

3、如何用文件

1)打开文件

  方式一:open
  举例:open("文件路径(可以是绝对路径,也可以是相对路径)",mode:"打开文件的方式(rwa,tb),encoding="字符编码格式")  #打开文件
  可以将这个值做变量 f = open("文件路径(可以是绝对路径,也可以是相对路径)",mode:"打开文件的方式(rwa,tb),encoding="字符编码格式")
  这时 f=值 叫做文件句柄/文件对象,可以对文件句柄做操作
  f.close()             #关闭文件,每次用open打开文件操作完之后都要记得关闭文件,不然耗费操作系统的资源,如果打开文件数量过多时会打不开。

  方式二:with open
  举例 with open("文件路径(可以是绝对路径,也可以是相对路径)",mode:"打开文件的方式(rwa,tb),encoding="字符编码格式") as f:
  可以打开多个文件,用逗号隔开,如果打开文件数量多的话每个结尾可以加一个/,换行表示。
  with(上下文管理),这个方式打开文件会在操作完文件之后自动关闭文件,无需手动关闭。

三、字符编码

1、储备知识:

  运行python程序的三个步骤:python.py
  1、先启动python解释器
  2、解释器会将文本文件a.py内容由硬盘读入内存
  3、解释器会解释执行刚刚读入内存的内容,识别python语法

2、什么是字符编码:

  人类的字符 ----- 编码 -----> 数字

  人类的字符 <----- 解码 ----- 数字

  编码与解码的过程必须参照字符编码表

3、为何要学习字符编码:

  为了解决运行python程序三个阶段中2、3阶段有可能出现的乱码问题

4、字符编码表发展史

  一家独大:

        ASCII:只能识别英文字符
        8bit 对应一个英文字符     1byte = 8bit (byte:字节   bit:(二进制)位,比特)



  天下大乱

        GBK:能识别汉子与英文

        用2Bytes对应一个字符

        Shift-JIS:日文与英文

        Euc -KR:韩文与英文

        英文字符----->内存:ASCII格式的二进制----->硬盘:ASCII格式的二进制

        中文字符、英文字符----->内存:gbk格式的二进制----->硬盘:gbk格式的二进制

        日文字符、英文字符----->内存:shift-JIS格式的二进制----->硬盘:shift-JIS格式的二进制

        万国字符----->内存:unicode格式的二进制----->硬盘:utf-8格式的二进制



  分久必合

        unicode:1、万国字符

        2、兼容老的字符编码表

结论:

  如何保证不乱码

  1、编码与解码必须参照同一张字符编码表
posted @ 2020-12-24 20:11  抓鬼少年  阅读(92)  评论(0)    收藏  举报