zoukankan      html  css  js  c++  java
  • 7-5字符编码和文件处理

    一.字符编码

    1.1什么是字符编码

    计算机是基于电工作的,换而言之计算机只能识别二进制数(0,1),让计算机能懂得人类的语言,也就是如何将是实现字符到数字的过程,一个字符如何对应一个特定数字的标准,这个标准称之为字符编码。

    1.2字符编码的发展史

    1.ASCII码表

    用8位二进制数(1Bytes)表示一个英文字符,数量最多可至256个(0-255/0000 0000-1111 1111)

    2.各国各自制定的编码表

    为了满足中文和英文的需求,中国制定了GBK

    GBK:2Bytes表示一个中文字符,1Bytes表示一个英文字符

    日本制定了shift_JIS

    韩国人制定了Euc_kr

    3.统一标准

    unicode:统一用2个Bytes表示一个字符

    unicode的缺点:

    1.浪费存储空间

    2.io次数增加,程序运行效率降低(致命)

    unicode的优点:

    1.能兼容万国字符

    2.其他国家的编码数据由硬盘读到内存的时候Unicode与其他国家的编码都有对应关系

    对于全是英文的文章来说,Unicode的样式多了一倍的存储空间,这样太过浪费,所以后来出现了utf-8。在utf-8中对英文字符采用1Bytes表示,对中文字符采用3Bytes表示。

    现状:

    内存中采用Unicode

    硬盘中采用utf-8

    4.编码和解码过程

    编码(encode):

    数据由内存保存到硬盘

    1.内存中的unicode格式二进制数>>>>编码(encode)>>>>>utf-8格式的二进制数据

    硬盘中的数据由硬盘到内存

    1.硬盘中的utf-8格式的二进制数据>>>>解码(decode)>>>>>内存中的Unicode格式的二进制数据

    ps:1.如何保证不乱码在于文件用什么编码编写的就用什么编码解

            2.关于python2和python3的区别

      在pytho2中按照文本文件读入解释器中默认使用ascii码(unicode还没盛行)

      在python3中按照文本文件读入解释器默认使用的是utf-8

    文件头:# condong:(字符编码)  eg:(# conding:utf-8)

    写在文件的开头,让解释器以规定的字符编码来解读文件

    x = ''
    res1 = x.encode('utf-8')  # 将unicode编码成可以存储和传输的utf-8的二进制数据
    print(res1)  # b'xe4xb8x8a'
    # bytes类型  字节串类型  你就把它当成二进制数据即可
    res2 = res1.decode('utf-8')  # 将硬盘中的utf-8格式的二进制数据解码成unicode格式的二进制数据
    print(res2)

    二.文件处理

    2.1什么是文件

    操作系统暴露给我们操作复杂硬件(硬盘)的简易接口

    2.2为什么操作文件

    人或者应用程序要永久保存数据

    2.3如何用文件

    f=open()

    f.read()

    f.close()

    2.4如何通过python代码操作文件

    使用open命令如:

    r取消转义
    f = open(r'D:Python项目day07a.txt',encoding='utf-8')  # 向操作系统发送请求  打开某个文件
    # 应用程序要想操作计算机硬件 必须通过操作系统来简介的操作
    print(f)  # f是文件对象
    print(f.read())  # windows操作系统默认的编码是gbk python默认的是utf-8
    f.read()  # 向操作系统发请求 读取文件内容
    f.close()  # 告诉操作系统 关闭打开的文件
    print(f)
    print(f.read())

    ps:如要打开a.txt在输入文件路径时可以采用绝对路径也就是文件的全部路径名称,也可以采用相对路径,加入文件在‘day07’文件夹下,此刻有另一个‘day07’下文件夹b.txt可以直接输入r'a.txt',encoding='utf-8'打开文件

    2.5文件上下文操作

    with open(r'D:Python项目day07a.txt',encoding='utf-8') as f ,
            open(r'D:Python项目day07.txt',encoding='utf-8') as f1:  # f仅仅是一个变量名 你把它看成是一个遥控器
        print(f)
        print(f.read())
        print(f1)
        print(f1.read())

    2.6文件打开模式

    t:操作文件内容都是以字符串为单位,会自动帮我们解码,必须指定encoding参数

    b:操作文件都是以Bytes(二进制)为单位,硬盘中存的是什么就取出来什么一定不能指定encoding参数
    ps:文件的打开模式一定要和打开方式一起使用如“rt”,其中t模式只能用于文本文件,b模式可以用于任何文件

    2.7文件打开的方式

    r:只读模式

    w:只写模式

    a:追加写模式

    r模式:只读模式,如果打开的文件存在则光标跳到文件的开头,如果文件不存在则会报错

    with open(r'D:pythonpython练习a.txt',mode = 'rt',encoding = 'utf-8') as f:
        print(f.readable())  # 是否可读   True
         print(f.writable())  # 是否可写  False
         print(f.read())  # 一次性将文件内容全部读出
       

    ps:其中mode参数可以不写,不写默认是rt模式,只读的文本文件,其中rt中的t不写可以不写

    with open(r'D:pythonpython练习a.txt') as f:
          pass

    相对路径:

    with open(r'数据类型分类.jpg',mode='rb') as f:
        pass

    rb模式:

    with open(r'C:Users何晓东Desktop上课截图数据类型分类.jpg',mode='rb') as f:
        print(f.readable())  # 是否可读  True
        print(f.writable())  # 是否可写  False
        print(f.read())  # 一次性将文件内容全部读出
    with open(r'D:pythonpython练习a.txt',mode = 'rt',encoding = 'utf-8') as f:
        print(f.readable())  # 是否可读
        print(f.writable())  # 是否可写
        print(">>>1:")
        print(f.read())  # 一次性将文件内容全部读出
        print('>>>2:')
        print(f.read())  # 读完一次之后 文件的光标已经在文件末尾了,再读就没有内容了可读
        print(f.readlines())  # 返回的是一个列表  列表中的一个个元素对应的就是文件的一行行内容  由于光标在最后返回为[]
        print(f.readline())  # 只读取文件一行内容
     

    w模式:只写模式,打开的文件若不存在则新建该文件,若存在则打开并清空其中内容然后在写入(慎用)

    with open(r'D:pythonpython练习a.txt',mode = 'wt',encoding = 'utf-8') as f:
        print(f.readable())  # 是否可读
        print(f.writable())  # 是否可写
        f.write('学习使我快乐,我爱学习
    ')
        f.write('学习使我快乐,我爱学习
    ')
        f.write('学习使我快乐,我爱学习
    ')
        f.write('学习使我快乐,我爱学习
    ')
        f.write('学习使我快乐,我爱学习
    ')
        l = ['学乐,我学习
    ','学习使我快乐,我习
    ','学乐,我爱学习
    ']
        f.writelines(l)  # 输入多行
      

    a模式:追加写模式 打开的文件若不存在,会自动创建该文件,若已存在则会打开文件不清空内容并把光标移至最后

    with open(r'D:pythonpython练习a.txt',mode = 'a',encoding = 'utf-8') as f:
       print(f.readable())  # 是否可读  False
        print(f.writable())  # 是否可写  True
        f.write('我超爱学习
    ')
  • 相关阅读:
    人工智能 tensorflow框架-->简介及安装01
    【亲测】自动构建多个指定的class并发执行:Jenkins+Maven+Testng框架
    【亲测】Appium测试Android混合应用时,第二次切换到WebView失败
    appium_v1.4.16版本自动化适配android7.0系统
    python之拆包与装包
    python3之线程
    python3之进程
    python3之tcp
    python3之udp
    python3面向对象(4)之__new__方法和__init__方法
  • 原文地址:https://www.cnblogs.com/z929chongzi/p/11140410.html
Copyright © 2011-2022 走看看