今日总结

1.字符编码

  • 字符编码的简介
  • 字符编码的发展史
  • 字符编码的实际应用
  • 文件操作简介

2.文件操作

  • 文件操作简介

  • 文件的读写模式

  • 文件的操作模式

  • 文件的操作方法

  • 文件补充说明4

    内容详细

    字符编码的简介

    字符编码只针对文本文件
    

    字符编码的发展史

    因为计算机只有两种状态,就是0和1,所以当初人们就用英文字母来与数字对应,字符编码发展到现在一共经历过三个阶段:
    1.一家独大:因为计算机是美国人发明的,所以一开始的时候,就只考虑到了英文字符与数字的对应关系,当时就只有美国一种叫做ASCII码的字符编码,里面只记录了英文字符与数字的对应关系,
    1bytes(8bit)来表示英文,最基本的英文字母(A--Z)与数字对应就是(65--90),(a--z):(97--122)。
     2.群雄割据:随着计算机的普及,其它国家也面临着相同的问题,就是字符编码就只有美版,没有自己国家的字符编码,用起来就相当不方便,于是每个国家就根据那份ASCII码再加上自己国家的文字进行改编。比方我国的叫GBK,里面就记录了英文、中文与数字的对应关系,但是因为中国汉字太多,所以我国一般都是用3bytes来表示中文。像韩国就是Euc_kr,里面就是记录了英文与韩文与数字的对应关系,所以各个国家就是英文加本国文字然后与数字对应的
    3.天下一统:正是由于各国都有本国的字符编码,所以就造成了编写与翻译阶段使用的编码表不一致,然后就产生了乱码,为了解决这一现象,有人就发明了unicode编码,又叫万国码,就是通用的,但是因为unicode码所有的字符都是2bytes,会浪费空间和IO时间,所以就有更优化的版本叫utf8,内存使用的是unicode,而硬盘使用的是utf8.
    

    字符编码的实际应用

    # 1.编码与解码
    编码(encode):就是将人类能够读懂的字符编码成计算机能够直接读懂的字符
    如:s1 = '事已至此 何不一搏'
      		print(s1.encode('gbk'))
        # 需要注意的是如果字符串前面加了字母b,表示该数据类型为bytes类型,bytes类型可以看成是二进制。
    解码(decode):就是将计算机能够直接读懂的字符解码成人类能够读懂的字符
      如:res = b'\xca\xc2\xd2\xd1\xd6\xc1\xb4\xcb \xba\xce\xb2\xbb\xd2\xbb\xb2\xab'
        	 print(res.decode('gbk'))
       # 基于网络传输数据,数据都必须是二进制格式。
    # 2.如何解决乱码
    * 数据当初是以什么编码编的就以什么编码解即可。
    如:s1 = '事已至此 何不一搏'
    # 编码 res1 = s1.encode('gbk')
            print(res1)
    # 乱码 res2 = res1.decode('euc_kr')
        	print(res2)
    # 解码 res3 = res1.decode('gbk')
    		print(res3)>>>>>>>>>>>>正常显示
        
    # 3.python解释器层面
    在python2解释器中,默认的编码还是ASCII码,所以我们在用Python2解释器的时候要注意2点
    *文件头必须写在文件的最上方,告诉解释器使用指定的编码
    *在使用Python2解释器的环境下定义字符串习惯在前面加字母u.
    在Python3中默认的编码是utf8
    

    文件操作简介

    # 文件就是操作系统暴露给用户可以直接操作硬盘的快捷方式
    # 代码操作文件的流程
    1.打开文件、创建文件
    2.编辑文件内容
    3.保存文件内容
    4.关闭文件
    # 基本语法结构
    结构1
    f1 = open()>>>>>>>>>>打开文件
    f1.closs()>>>>>>>>>>>关闭文件
    结构2
    	with open() as f:
            pass(pass只是补全语法,本身没有任何意义)
     # 使用关键字打开文件
    以后写路径为了防止特殊符号,直接加r
    open(文件的路径,文件的操作模式,文件的编码)
    1.文件的路径是必须要写的
    2.文件的操作模式、文件的编码有时候不用写
    # print(res.read())>>>>>>>>读取文件内容
    # res.close()>>>>>>>>>>>关闭文件
    上述操作open完最后都要执行close,而close这一行很容易被遗忘
     # with上下文管理
        with open(r'a.txt', 'r', encoding='utf8') as f:  # f = open()
            data = f.read()
        print(data)
    

    文件的读写模式

    r==read:只读模式,只能读不能写
    w==write:只写模式,只能写不能读
    a==append:只追加模式,在文件末尾添加内容
    # r模式
    * 路径不存在:直接报错
    如:b.txt路径不在
     with open(r'b.txt', 'r', encoding='utf8') as f1:
     * 路径1存在:正常打开文件并等待内容读取
    如:a.txt路径存在的话
    with open(r'a.txt', 'r', encoding='utf8') as f1:
         print(f1.read())  # 一次性读取文件内所有的内容
     # w模式
    *路径不存在:自动创造文件
    with open(r'a.txt', 'w', encoding='utf8') as f1:
        pass
    *路劲存在:先清空文件内容,之后再写入数据
    with open(r'a.txt', 'w', encoding='utf8') as f1:
        f1.write('呵呵\n')>>>>>>>>>>写入文件内容
        \n与\r都是换行的
      # a模式
    *路径不存在:自动创建文件
    with open(r'a.txt', 'a', encoding='utf8') as f1:
         pass
    *路径存在:不会清空文件内容,而是在文件末尾等待新内容的加入
    with open(r'a.txt', 'a', encoding='utf8') as f1:
         f1.write('呵呵')
            print(f1.read())
    
    

    文件的操作模式

    # t模式:只能操作文本文件,而且必须要指定encoding参数,该模式最小单位是字符串
    文本模式:t    w    a
    默认模式:rt   wt   at
    # b模式:又叫二进制模式,可以操作任意类型的文件,该模式也不需要指定encoding参数,最小单位是bytes类型
    rb,wb,ab都不能省略b
    

    文件内置方法

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