python基础学习9

python基础学习

内容概要


  • 字符编码的简介
  • 字符编码的发展史
  • 字符编码的实际应用
  • 文件操作简介
  • 文件读写模式
  • 文件操作模式
  • 文件操作方法

内容详情


字符编码的简介

# 字符编码主要研究的对象是文本文件(图片、视频、音频除外)
  文本编辑器读取文件内容的流程
      阶段1、启动一个文件编辑器(文本编辑器如nodepad++,pycharm,word)
      阶段2、文件编辑器会将文件内容从硬盘读入内存
      阶段3、文本编辑器会将刚刚读入内存中的内容显示到屏幕上
  python解释器执行文件的流程
      阶段1、启动python解释器,此时就相当于启动了一个文本编辑器
      阶段2、python解释器相当于文本编辑器,从硬盘上将test.py的内容读入到内存中
      阶段3、python解释器解释执行刚刚读入的内存的内容,开始识别python语法
计算机底层存储数据的原理
	"""只认识0101010的二进制数字"""

字符编码的发展史

# 字符编码表:内部就是存储了数字与人类字符的对应关系

1.美国
  定义一个数字与英文字符的对应关系>>>:字符编码表
  ASCII码:只记录了英文字符与数字的对应关系
      1bytes存储英文字符
      """
      A-Z:65-90
      a-z:97-122
      """
2.中国
  自己发明一套编码表>>>:数字与中文、英文字符的对应关系
  GBK码:记录了英文、中文与数字的对应关系
      1bytes存储英文字符
      2bytes存储中文字符 如果不够则使用3bytes\4bytes
  韩国
  韩国棒子也发明了他们的编码表>>>:数字与韩文、英文字符对应的关系
  Euc_kr:记录了英文、韩文与数字的对应关系
  日本
  小日本也发明了他们的编码表>>>:数字与日文、英文字符对应的关系
  shift_JIS:记录了英文、日文与数字的对应关系
  ...
  """
     群雄割据的阶段会产生一个非常奇怪的现象>>>:乱码
     其实就是编码本使用混乱导致文本展示错误
  """
3.unicode  # 万国码
  """内部记录了所有国家的字符与数字的对应关系"""
        所有的字符统一采用最少2bytes存储
  现在的计算机可以输出所有国家的字符 内存使用的是unicode编码
  unicode会浪费存储空间和IO时间 所以又开发了一个编码
      utf8  # unicode transformation format 
      优化了unicode存储数据的容量
          1bytes存储英文字符
          3bytes存储中文字符
# 结论:内存中的编码不需要考虑 值考虑硬盘上的即可  utf8

字符编码的实际应用

# 编码与解码
  encode 编码 将人类能够读懂的字符编码成计算机能够读懂的字符 print(str.encode('gbk'))
  decode 解码 将计算机能够读懂的字符解码成人类能够读懂的字符 print(str.decode('gbk'))
  '''字符串前面如果加了字母b 表示该数据类型为bytes类型 bytes类型可以看成是二进制'''
  '''基于网络的数据传输 数据都必须是二进制格式 所以肯定涉及到编码与解码'''

# 如何解决乱码
  数据当初以什么编码编的就以什么码解即可

# python解释器层面
  python2解释器默认的编码是ASCII码
    1.文件头:必须写在文件的最上方 告诉解释器使用指定的编码
      coding:utf8 美化写法:-*-coding:utf8-*-
    2.字符前缀:在使用python2解释器的环境下定义字符串习惯在前面加u
      name = u'你好啊'
  python3解释器默认的编码是utf8

文件操作简介

'''文件即操作系统暴露给用户可以直接操作硬盘的快捷方式'''

# 代码操作文件的流程
  1.打开文件、创建文件
  2.编辑文件内容
  3.保存文件内容
  4.关闭文件

 ## 基本语法结构
  结构1
    f1 = open()
    f1.close()
  res = open(r'路径', 'r', encoding='utf8') 使用关键字打开文件 
      '''以后写路径为了防止特殊符号 直接加r'''
      '''open(文件的路径,文件的操作模式,文件的编码) 文件的路径是必须要写的'''
  print(res.read()) 读取文件内容
  res.close() 关闭文件
      """上述操作open完最后都需要执行close 而close这一行很任意被遗忘"""
  结构2
    with open() as f:
        pass
  with open(r'路径', 'r', encoding='utf8') as f: with上下文管理
      data = f.read()
  print(data)

'''pass  (推荐)补全语法结构 本身没有任何功能'''
'''...  (不推荐)补全语法结构 本身没有任何功能'''

文件的读写模式

r模式 r read 只读模式:只能读不能写
  with open(r'路径', 'r', encoding='utf8') as f1:
      print(f1.read())  # 一次性读取文件内所有的内容
      f1.write('python是最牛逼的语言!!!')  # 报错
  路径不存在:直接报错
  路径存在:正常打开文件并等待内容读取

w模式 w write 只写模式:只能写不能读
  with open(r'路径', 'w', encoding='utf8') as f1:
      f1.write('文本内容\n')  # 写入文件内容
      print(f1.read())  # 报错
  """
  换行  最早的时候:\r\n
  为了节省空间支持一个字符 根据操作系统的不同可能有所区别
      \n 、 \r
  """
  路径不存在:自动创建文件
  路径存在:先清空文件内容 之后再写入数据

a模式 a append 只追加模式:在文件末尾添加内容
  with open(r'路径', 'a', encoding='utf8') as f1:
  f1.write('文本内容\n')  # 写入文件内容
  print(f1.read())  # 报错
  路径不存在:自动创建文件
  路径存在:不会清空文件内容 而是在文件末尾等待新内容的添加

文件的操作模式

t模式		
  文本模式 是默认的模式
  r rt
  w wt
  a at
  1.该模式只能操作文本文件
  2.该模式必须要指定encoding参数
  3.该模式读写都是以字符串为最小单位
b模式    
  二进制模式  可以操作任意类型的文件
  rb  不能省略b
  wb  不能省略b
  ab  不能省略b
  1.该模式可以操作任意类型的文件
  2.该模式不需要指定encoding参数
  3.该模式读写都是以bytes类型为最小单位

文件内置方法

read()  一次性读取文件内容
1.执行完之后光标在文件末尾 继续读取没有内容
2.当文件内容特别大的时候 容易造成内存溢出(满了)
readline()  一次只读一行内容
readlines()  结果是一个列表 里面的各个元素是文件的一行行内容
readable()  判断当前文件是否可读
支持for循环  一行行读取文件内容(推荐使用)  内存中同一时刻只会有一行内容
write  写入文件内容(字符串或者bytes类型)
writelines()  可以将列表中多个元素写入文件
writeable()  判断文件是否可写
flush()  相当于主动按了ctrl+s(保存)

posted @ 2022-03-14 23:39  弄臣  阅读(32)  评论(0)    收藏  举报