• 上周内容回顾


    内容回顾

    • 列表的内置方法list
    列表在调用内置方法之后不是产生新的值,而是改变它的自身
    1.统计列表内数据的个数
    	关键字:len
    	l1 = ['jason','lisa','kevin','tony','joker']
    	print(len(l1)) # 5
    2.2.1 尾部追加一个数据
    	关键字:append() 括号内无论放什么数据类型,都会当一个整体追加
    	l1 = ['jason','lisa','kevin','tony','joker']
    	l1.append([1,2,3])
    	print(l1) # ['jason',lisa,'kevin','tony','joker',[1,2,3]]
    2.2 任何位置追加一数据
    	关键字:insert() 括号内不管放什么数据类型,也是会当一个整体追加
    	l1 = ['jason','lisa','kevin','tony','joker']
    	l1.insert(1,'插队')
    	print(li) # l1 = ['jason','插队','lisa','kevin','tony','joker']
    2.3扩展列表
    方式一: for 循环
    方式二: 使用 + 号
    方式三: extend() 括号内必须是支持 for循环的数据类型
    推荐使用第三种方式 底层原理就是 for循环加append方法
    3.查询数据或修改
    3.1 查询数据 通过索引即可
    l1 = ['jason','joker','lisa','kevin''tony]
    	print(l1[0])  # jason
    	print(l1[0:2])  # ['jason','joker']
    3.2 修改数据 把需要修改的数据值索引修改
    4.删除数据
    4.1 通用删除策略
    	关键字:del 索引修改
    	l1 = ['jason','joker','lisa','kevin''tony]
    	del l1[1]
    	print(l1) # ['jason','lisa','kevin','tony']
    4.2 指名道姓的删
    	关键字:remove() 括号内放入明确要删除的数据值
    	l1 = ['jason','joker','lisa','kevin''tony]
    	l1.remove('jason')
    	print(l1) # ['joker','lisa','kevin','tony']
    4.3 先取出数据值 然后再删
    	关键字:pop() 什么都不放默认取出尾部数据值 然后再删
    	同时也可以通过索引取出数据值 然后再删除
    	l1 = ['jason','joker','lisa','kevin''tony]
    	res = l1.pop() # 空格默认取出尾部在删
    	print(res) # res = tony
    	print(l1) # ['jason','joker','lisa','kevin']
    5.查看数据值对应的索引值
    	关键字:index()
    	l1 = ['jason','joker','lisa','kevin''tony]
    	l1.index(2)
    	print(l1) # lisa
    6.统计某个数据值出现的次数
    	关键字:count()
    	l1 = ['jason','jason','jason','tony','lisa']
    	l1.count('jason')
    	print(l1.count('jason')) # 3
    7.排序
    	升序 关键字:sort
    	降序 关键字:sort(reverse = True)
    8.翻转
    	关键字:reverse 前后跌倒
    9.比较运算
    	l1 = [66,22]
    	l2 = [11,22,33,44,55]
    	print(l1 > l2) # True 按照第一个位置来比较
    
    折叠
    • 字典的内置方法
    类型转换
    字典很少涉及到类型转换 都是直接定义使用
    1.字典内的K:V键值对是无序的 所以无法索引取值
    2.取值操作
    	关键字:get
    	info = {'username': 'lisa','pwd': 11,'hobby': ['read', 'run']}
    	print(info.get('username')) # lisa
    	print(info.get('xxx')) # None 键不存在返回得值 默认返回None
    	print(info.get('username','键不存在返回不存在')) #lisa
    	print(info.get('某某','键不存在返回不存在')) # 键不存在返回不存在
    3.统计字典内数据的个数
    	关键字:len
    4.修改数据与新增
    	通过索引K 来修改
    	在没有K 的时候是增加
    5.删除数据
    方式一
    	关键字:del
    	info = {'username': 'lisa','pwd': 11,'hobby': ['read', 'run']}
    	del info['username']
    	print(info) # ['pwd': 11,'hobby': ['read', 'run']}
    方式二
    	关键字:pop
    	info = {'username': 'lisa','pwd': 11,'hobby': ['read', 'run']}
    	res = info.pop('usermane')
    	print(info) # ['pwd': 11,'hobby': ['read', 'run']}
    方式三
    	关键字:popitem
    	info.popitem # 随机删除
    6.快速获取键、值、键值对数据
    方式一
    	关键字:keys()
    	info = {'username': 'lisa','pwd': 11,'hobby': ['read', 'run']}
    	print(info.keys()) # 'username','pwd',hobby 获取字典所有的K值
    方式二
    	关键字:values()
    	info = {'username': 'lisa','pwd': 11,'hobby': ['read', 'run']}
    	print(info.values) # 'lisa',11,'read','run' 获取字典所有的V值
    方式三
    	关键字:items()
    	info = {'username': 'lisa','pwd': 11,'hobby': ['read', 'run']}
    	print(info.items) # 获取字典KV键值对数据 组织成列表套元组dict_items([('username', 'lisa'), ('pwd', 11), ('hobby', ['read', 'run'])])
    8.修改字典数据 键存在则是修改 不存在则是新增
    	关键字:updata
    9.快速构造字典 给的值默认 
    	关键字:fromkeys
    10.键存在获取对应的数据值 键不存在设置并返回新的值
    	关键字:setdefault
    
    折叠
    • 元组的内置方法
    支持 for循环的数据类型都可以转成元组
    1.索引取值
    2.统计元组内数据的个数 len
    3.查与改
    	元组支持查看 不支持修改
    
    • 集合的内置方法
    类型转换
    	支持 for循环的 并且数据必须是不可变类型
    1.定义空集合 set()
    2.集合内数据必须是不可变类型(整型 浮点型 字符串 元组 布尔值)
    3.集合自带去重功能
    4.关系运算
    	& | ^ > <
    
    • 可变类型与不可变类型
    1.可变的类型:list
    	值改变(内存方法) 内存地址可以不变
    列表内置方法是修改自身,索引是可变类型
    2.不可变的类型:str int float
    	值改变(内置方法) 内存地址肯定变
    字符串的内置方法是产出一个新的数据 需要用另一个变量名接收 所以是不可变类型
    
    • 垃圾回收机制
    什么是垃圾回收机制
    	在python中编辑会产生很多的数据值 当没有绑定变量名的数据值则会被当成垃圾回收
    '''python会自动申请内存和释放空间'''
    1.引用计数
    	当数据值身上计数不为0时表示还有用 不会被回收
    	当数据值身上计数为0时 则会被垃圾机制当成垃圾给回放
    2.标记清除
    	专门用于解决循环引用的问题 将内存中所产生的数据值全部检查一遍 是否存在循环打上标记后一次性清除
    3.分代回收
    	标记清除每隔一段时间就要把所以的数据排查一遍 资源消耗过大
    	为了减轻垃圾机制的资源损耗 所以开发了三代垃圾管理机制 越往下排查的的频率就越低
    
    • 字符编码简介
    1.只有文本文件才有字符的概念
    2.计算机内部存取的数据本质(二进制)
    	计算机其实只认识01
    3.为什么我们在使用计算机的时候能随意敲出各国的文字
    	因为计算机不认识我们人家的语言 所以我们人类定义了一种数字的转换关系
    4.转换关系不能随便改变 应该有统一的标准
    	字符编码表 记录了人类的字符与数据对应的关系
    
    • 字符编码的发展史
    1.一家独大
    	计算机是由美国人发明的 美国人需要让计算机识别英文字符
    ps:英文所有的字符加起来不超过127个(2的七次方)但是美国人考虑到后续可能会出现新的字符所以加了以备不时之需(2的八次方)
    ASCII编码表:内部记录了英文字符与数字的对应关系 1bytes来储存字符
    2.群雄割据
    因为ASCII编码表只能表示英文不能表示中文,后来我们中国就开发了一套可以识别中文的编码表
    	GBK编码表:内部记录了中文字符、英文字符与数据的对应关系
    		2bytes起步储存中文(遇到生僻字会使用更多的字节)
    		1bytes储存英文
    韩国所对应的编码表
    	EUS_kr编码表:内部记录了韩文、英文字符与数字的对应关系
    日本所对应的编码表
    	shift_JIS编码表:内部记录了日文、英文字符与数字的对应关系
    注意:此时各国的计算机文件文本无法直接交互 会出现乱码的情况
    3.天下统一
    万国码(unicde):兼容万国的字符
    	所有的字符都以2bytes起步储存
    utf家族(针对unicde版本的优化):utf8
    	英文还是采用1bytes
    	其他统一采用3bytes
    注:内存使用unicde 硬盘使用utf8
    
    • 字符编码的实操
    1.只有字符串可以参与编码与解码 其他数据类型需要先转换成字符串才可以
    2.如何解决乱码
    	当初使用什么代码存的就使用什么代码来解
    3.编码与解码
    	把人类的字符按照指定的编码转换成计算机能识别的数字
    4.解释器层面
    	python2默认的编码是ASCII码
    	文件头 # coding:utf8
    	定义字符串:需要在字符串的前面加上u
    为什么要这么做呢 因为python2的时候还没有发明出utf8 所有只能采取补救措施
    	python默认的编码就是utf8
    
    • 文件的操作介绍
    1.文件操作
    	通过编写代码自动来操作文件读写
    2.什么是文件
    	双击文件图标是从硬盘加载数据到内存
    	写文件之后保存其实就是将内存的数据刷到硬盘
    	文件其实就是操作系统暴露给用户操作计算机的快捷方式之一
    3.如何使用代码操作文件
    	open('文件路径','读写模式','字符编码')
    	方法一:
    	f = open()
    	f.close()
    	方法二:
    	with open() as 变量名
    	子代码运行之后自动调用close()方法
    4.针对文件路径可能有特殊含义字母与撬棍的组合
    	在字符串的前面加上字母'r'取消特殊含义
    
    • 文件的读写模式
    '''补充知识
    1.with语法支持一次性打开多个文件
    with open(r'a.txt','r',encoding='utf8') as f1, open(r'b.txt','r',encoding='utf8') as f2, open(r'c.txt','r'encoding='utf8') as f3...
    2.补全python语法 但是不执行任何操作
    	pass (推荐使用)
    	... 不推荐使用
    3.通常情况下英语单词的结尾如果加上了able表示该单词具备了描写能力
    	readable 具备读取内容的能力
    	writable 具备填写内容的能力
    '''
    1.r模式的使用 (默认的只读)
    	with open(r'a.txt','r'encoding='utf8') as f:
    	res = f.read()
    	print(res)
    如果文件不存在时则会报错 文件存在时会打开等待读取
    2.w模式的使用 只写
    	with open(r'b.txt','w'encoding='utf8') as f:
    	f.write('你们好鸭\n')
    	f.write('我是新来的\n')
    当文件不存在时会创建一个空文件 文件存在时会清空文件内容等待填写新的内容
    3.a模式的使用(只追加写)
    	with open(r'c.txt','a',encoding='utf8') as f:
    	f.write('你们好鸭\n')
    	f.write('我是新来的\n')
    当文件不存在时会创建空文件 不会清空该文件里的内容 只会在文件的末尾等待填写新的内容
    
    折叠
    • 文件的操作模式
    文本模式 t
    	rt,wt,at
    1.只能操作文本文件
    2.必须指定encoding参数
    3.读写都是以字符串为单位
    二进制模式 bytes
    	rb,wb,ab 必须自己指定 不能省略
    1.能够操作所有类型的文件
    2.不需要指定encoding参数
    3.读写都是以bytes为单位
    
    • 文件的诸多方法
    read() # 一次性读取文件的内容并且光标会停在末尾 继续读取则为空
    readdline() # 一次只读一行内容
    readdlines() # 按照行的方式读取所有内容并组织成列表的方式返回
    readable() # 判断文件是否可读
    writable() # 判断文件是否可写
    write() # 填写文件内容
    writelines() # 支持填写容器类型 内部可以存放多个数据值类型
    flush() # 将内存文件数据立刻刷到硬盘 (相当于主动帮按了ctrl+s)
    '''当文件数据比较大时,不建议一次性读取'''
    可以使用 for循环读取 文件支持 for循环一次只读一行
    	for line in f:
    	print(line)
    
    • 文件内光标的移动
    1.在文本模式下read的括号内数字是几就表示读多少个字节
    with open(r'a.txt','r',encoding='utf8')as f:
    	data = f.read(3)
    	print(data)
    2.在二进制模式下read的括号内数字是几就表示读多少个字节,英文是一个字节 中文是三个字节 括号内的数字不能大于小于字节 否则和报错
    with open(r'a.txt','rb')as f:
    	data = f.read(3)
    	print(data.decode.('utf8'))
    f.tell() 获取光标的移动的字节数
    seek(offset,whence) 模式
    	offset 控制光标移动的位移量
    	whence模式0,1,2
    	0的参照物是从文件开头的位置
    	1的参照物是从光标当前所在的位置
    	2的参照物是从文件末尾的位置 应该倒着移动
    注:12模式只能在二进制模式下使用 0无所谓
    
    • 文件的数据修改
    """机械硬盘的存储数据原理
    	1.数据的修改 其实就是覆盖写
    	2.数据的删除 占有态跟自由态"""
    修改方式一
    覆盖写:先读取文件里的内容到内存 在内存中完成修改 之后w模式打开该文件写入
    	with open(r'a.txt','r',encoding='utf8')as f:
    		data = f.read()
    	new_data = data.replace('你好''不好')
    	with open(r'a.txt','w',encoding='utf8')as f1:
    		f1.write(new.data)
    优点是只占用硬盘一块空间
    缺点就是数据量比较大的时候会造成内存爆满
    修改方式二
    重命名:先将文件内容读取至内存 在内存中完成修改 之后在保存到另一个文件中 在将原来的文件删除 将新的文件重命名原文件
    import os
    with open('a.txt','r'encoding='utf8')as f,\ 
    open('.a.txt.swap','w',encoding='utf8')as wrife_f:
    	for line in read_f:
    	  wrife_f.write(line.replace('Sb','Nb'))
    os.remove('a.txt')
    os.rename('.a.txt.swap','a.txt')
    优点 不会造成内存溢出
    缺点是可能会有那么一段时间需要占用两个硬盘空间 也可能是在内存没刷在硬盘
    
  • 相关阅读:
    某市住房公积金管理中心领导莅临创邻科技考察指导
    C#结构体记录
    请求转发和响应重定向
    有哪些零售O2O应用模式?如何构建O2O闭环生态系统?
    cesium 鹰眼图1
    WARING: UNPROTECTED PRIVATE KEY FILE!
    用go设计开发一个自己的轻量级登录库/框架吧(拓展篇)
    Notepad ++ 零基础入门到精通安装与配置教程(非常详细)
    用友第五届开发者大赛初赛晋级公示,复赛火热进行中!
    管理会计习题集及答案 5-7章
  • 原文地址:https://www.cnblogs.com/lisony/p/16439625.html