• python文件操作:字符编码与文件处理


    本文目录:

    一、字符编码

    二、文件处理

     

    一、字符编码

    储备知识点

    1. 计算机系统分为三层:

      应用程序
       操作系统
       计算机硬件

    2. 运行python程序的三个步骤

      1. 先启动python解释器
       2. 再将python文件当作普通的文本文件读入内存
       3. 解释执行读入内存的代码,开始识别语法

    字符编码

    1. 什么是字符编码

            字符编码表: 人类的字符<------------>数字
    
            1Bytes=8bit
            1B=8b 1字节等于8个二进制位
    
            ASCII码:只能识别英文字符,1英文字符=8bit
                用8个二进制bit(比特位)位表示一个英文字符
    
    
            GBK:能识别汉字与英文,1汉字=16bit,1英文字符=8bit
            Shift_JIS
            Euc-kr
    
            unicode:能够识别万国字符,1字符=2Bytes=16bit
                两大特点:
                    1. 能够兼容万国字符
                    2. 与各个国家的字符编码都有映射关系
    utf-8:是unicode的转换格式,1个英文字符=1Bytes 1汉字=3Bytes
    重点理论:
                1 编码与解码:
                    字符---编码-->unicode的二进制-------编码----->GBK的二进制
                    GBK的二进制-----解码-->unicode的二进制----解码->字符
    
                2 解决乱码问题的核心法则:
                    字符用什么编码格式编码的,就应该用什么编码格式进行解码
    
                3 python解释器默认的字符编码
                    python2:ASCII
                    python3:UTF-8
    
                    通过文件头可以修改python解释器默认使用的字符编码
                    在文件首行写:#coding:文件当初存的时候用的字符编码
    
                    针对python2解释器中定义字符串应该:
                        x=u""
                    对于python3解释即便是x=""不加u前缀也是存成unicode
    
                    在python3中
                        x='' # '上'存成了uncidoe
    
                        unicode--------encode----------->gbk
                        res=x.encode('gbk') #res是gbk格式的二进制,称之为bytes类型
    
                        gbk(bytes类型)-------decode---------->unicode
                        y=res.decode('gbk') #y就是unicode
     关于字符编码的操作:
                1. 编写python文件,首行应该加文件头:#coding:文件存时用的编码
                2. 用python2写程序,定义字符串应该加前缀u,如x=u''
                3. python3中的字符串都是unicode编码的,python3的字符串encode之后可以得到bytes类型

    2. 为何字符要编码

    人类与计算机打交道用的都是人类的字符,而计算机无法识别人类的字符,只能识别二进制,所以必须将人类的字符编码成计算机能识别的二进制数字.


    二、文件处理

    什么是文件

    文件是操作系统提供给用户/应用程序的一种虚拟单位,该虚拟单位直接映射的是硬盘空间

    为何要处理文件

     用户/应用程序直接操作文件(读/写)就被操作系统转换成具体的硬盘操作,从而实现
        用户/应用程序将内存中的数据永久保存到硬盘中

    如何用文件

    # 文件处理的三个步骤
    # f=open(r'c.txt',mode='r',encoding='utf-8') # 文件对象(应用程序的内存资源)------》操作系统打开的文件(操作系统的内存资源)
    # # print(f)
    # data=f.read()
    # f.close() # 向操作系统发送信号,让操作系统关闭打开的文件,从而回收操作系统的资源
    
    # 上下文管理
    # with open(r'c.txt',mode='r',encoding='utf-8') as f,open(r'b.txt',mode='r',encoding='utf-8') as f1:
        # 读写文件的操作
        # pass
    
    # 文件的打开模式:r(默认的) w a
    # 操作文件内容的模式:
    # t(默认的):操作文件内容都是以字符串为单位,会自动帮我们解码,必须指定encoding参数
    # b: 操作文件内容都是以Bytes(二进制)为单位,硬盘中存的是什么就取出什么,一定不能指定encoding参数
    # 总结:t模式只能用于文件本文件,而b模式可以用于任意文件
    
    
    # r模式:只读模式,在文件不存在时则报错,如果文件存在文件指针跳到文件的开头
    # with open(r'c.txt',mode='rt',encoding='utf-8') as f:
        # print(f.read())
        # print(f.readable())
        # print(f.writable())
        # f.write('hello') # 只能读
    
        # data=f.read()
        # print(data,type(data))
    
    # with open(r'c.txt',mode='rb') as f:
    #     data=f.read()
    #     # print(data,type(data))
    #     res=data.decode('utf-8')
    #     print(res)
    
    
    # with open(r'c.txt',mode='rt',encoding='utf-8') as f:
    #     # line=f.readline()
    #     # print(line,end='')
    #     # line1=f.readline()
    #     # print(line1,end='')
    #     # line2 = f.readline()
    #     # print(line2,end='')
    #
    #     lines=f.readlines()
    #     print(lines)
    # with open(r'c.txt',mode='rt',encoding='utf-8') as f:
    #     line=f.readline()
    #     print(line,end='')
    
    
    # 循环读文件内容的方法:
    # with open(r'c.txt',mode='rt',encoding='utf-8') as f:
    #     for line in f:
    #         print(line,end='')

                 

       

            

        

               

  • 相关阅读:
    什么是 bean 的自动装配?
    什么是 Spring 的内部 bean?
    什么是 Spring 的 MVC 框架?
    Spring AOP and AspectJ AOP 有什么区别?
    解释 JDBC 抽象和 DAO 模块?
    volatile 类型变量提供什么保证?
    一个 Spring Bean 定义 包含什么?
    什么是 Spring MVC 框架的控制器?
    使用 Spring 访问 Hibernate 的方法有哪些?
    什么是 Callable 和 Future?
  • 原文地址:https://www.cnblogs.com/wuzhengzheng/p/9677624.html
Copyright © 2020-2023  润新知