字符编码

字符编码

什么是字符编码 ?

由于计算机内部只能识别二进制。

但是用户在使用计算机时,却可以看到各式各样的语言字符。

字符编码:内部记录了人类字符与数字对应关系的数据。

( 只根文本文件和字符串有关 ) 。

 

字符串编码发展史

1. 一家独大 >>> 2.群雄割据 >>> 3.一统天下

1. 计算机由美国人发明,为了能让计算机识别英文,美国人发明了ASCII

    ASCII码中记录了英文字符与数字的对应关系,用一个字节一个字节表示。1bytes

    所有的英文字符和符号加起来不超过127个,使用八进制是为了后续发现新的语音留有余地。

    需要记住的对应关系是 A-Z:65-90   a-z:97-122  

 

 2.中国:为了让计算机识别中文,我们需要发明另一套编码表。

       我国发明了GBK码:记录了英文中文与数字的对应关系。

       对于英文还是使用一个字节;对于中文要使用两个甚至更多字节。2bytes,3bytes

    日本:为了让计算机识别日文,也需要发明一套编码表。

        shift_JIS码:记录日文与英文与数字的对应关系。

    韩国:为了让计算机识别韩文,也需要发明一套编码表。

        Euc_kr码:记录韩文英文与数字的对应关系。

  •    

 

 

 

 

 

 

 

 

 

3.一统天下

  为了实现国家与国家之间的文本数据可以无障碍交流,需要统一编码

  出现了unicode(万国码):统一使用两个及以上的字符记录与数字的对应关系。

             utf8(万国码的优化版):将英文还是以1bytes储存,中文以3bytes或更多储存。

    """  现在默认使用的是utf8  """

字符编码实操

1.如何解决乱码情况

    文件以什么编码编的,就规定以什么编码打开。

     如果使用不当,会出现乱码。

 

 2.python解释器版本不同的编码差异

   python2.x 内部的编码使用默认编码是ASCII

                    使用 coding:utf8 更改成utf8可使用的模式

                     一定要在定义内容前加小u

   python3.x 内部使用utf8

     修改自定义文本版本内容如下:

 3.编码与解码

    编码:将人类能够读懂的字符,安装的指定编码转成数字  (.encode

    解码:将数字按指定的编码转化为人类的字符。(.decode)

 

文件操作

 

1.什么是文件?

 

  文件就是操作系统展示给用户操作硬盘的一个接口。

 

2.代码如何操控文件

 

   关键字:open()

 

    1.利用open打开文件

     """

     文件路径,读写模式,字符编码

     文件路径与读写模式是必须的

      字符编码是可选的(有些模式需使用到编码)

     """

 

    2.利用其他方法操控文件

 

    3.关闭文件

        关闭文件除了使用.close( ) ,还可以使用with

         with上下文管理(能够自动帮你close( ) )

        with open(r'1.txt','r',encoding='utf8') as f1:

                     pass (用于补全语法结构,没有特殊意义)

        """以后代码操作文件 推荐使用with语法"""

 

   """
        文件路径
        相对路径与绝对路径
        路径中出现了字母与斜杠的组合产生了特殊含义如何取消
        在路径字符串前面加一个r
        r'D:\py20\day08\a.txt'
  """

 

 

 文件读写模式

   pass :补全语法结构,没有实际含义

    ...     :   也是补全语法结构,没有实际含义

 (不推介使用,代码中会有很多 . 号 会看不清)

 

     r  : 只读模式

         读文件,路径不存在时 直接报错

         文件存在时,读取内容 (.read)

    :只写模式

          路径不存在时,自动创建

          路径存在时,会清空原内容后再执行 (.write)

    a   :只追加模式

           可读,路径不存在时,自动创建

            路径存在时,则在最后添加内容

 小结:r 、w 、a 读写模式只能操作文本文件。

 文件操作方式:

# 1.读系列
with open(r'a.txt', 'r', encoding='utf8') as f:
     print(f.read())  # 一次性读取文件内所有
    """
    1.一次性读完之后 光标停留在了文件末尾 就无法再次读取内容
    2.该方法在读取大文件的时候 可能会造成内存溢出的情况
        解决上述问题的策略就是 逐行读取文件内容
    """
     print(f.readline())  # 每次只读文件一行内容
     print(f.readlines())  
     # 读取文件所有的内容 组织成列表 每个元素是文件的每行内容
     print(f.readable())  # 判断当前文件是否具备读的能力
 

# 2.写系列
with open(r'a.txt','w',encoding='utf8') as f:
     f.write('好好学习,天天向上!')  # 往文件内写入文本内容
    # f.write(123)  # 写入的内容必须是字符串类型
     f.writelines(['jason','kevin','tony']) 
    # 可以将列表中多个字符串元素全部写入
     print(f.writable())  # True 判断文件是否可写
     print(f.readable())  # False 判断文件是否可读
    # f.flush()  # 直接将内存内文件数据刷到硬盘 相当于ctrl+s

  ''' 涉及到多行文件内容的情况一般都是采用for循环读取 '''

文件操作模式:

  t     文本模式

1.默认的模式
        r  w  a  >>>  rt  wt  at
2.该模式所有操作都是以字符串基本单位(文本)
3.该模式必须要指定encoding参数
4.该模式只能操作文本文件

 b      二进制模式
1.该模式可以操作任意类型的文件
2.该模式所有操作都是以bytes类型(二进制)基本单位
3.该模式不需要指定encoding参数
       rb          wb        ab

(二进制的读写模式操作与文本模式操作大致一致)

二进制模式的读写操作。

可读模式为:rb (英文字符以1bytes表示,中文以3bytes表示。)

 

 做一个简易版本的拷贝功能需要:

 1.获取拷贝的文件路径

 2.获取新的文件路径

 3.利用文件操作实现

 

 文件内光标移动

 .tell  查看光标移动了多少字节

 .decode( )  在文件内写入对应的编码表,进行翻译

 .seek( )   控制文件内光标的移动 

 .replace  替换

 .seek(offset,whence):  offset表示位移量                          

                                              始终是以字节为最小单位
                                              正数从左往右移动
                                              负数从右往左移动

                                        whence表示模式      

                                              0: 以文件开头为参考系(支持tb两种模式)
                                              1: 只支持b模式 以当前位置为参考系
                                              2: 只支持b模式 以文件末尾为参考系

 

 文件的内容修改

 

 

 

posted @ 2021-11-10 19:49  代小白菜  阅读(99)  评论(0)    收藏  举报