上海day7--字符编码和文件的基本操做类型

目  录

1、前提知识

2、字符编码 *****

3、文件的基本操做类型

 

 

1、前提知识

一、运行程序的三个核心硬件:python

  cpu 、内存 、硬盘windows

  任何一个应用程序想要运算,必须先从硬盘加载到内存,而后CPU从内存取指执行。编辑器

二、Python解释器运行一个py文件(xxx.py)的三个步骤:ide

  先将Python解释器代码从硬盘读到内存;编码

  将xxx.py以普通文本文件的形式读到内存;spa

  Python解释器读取文件,识别Python语法,执行操做。操作系统

2、字符编码

一、字符编码针对的只是文字,像图片、音频、视频等都有指定的格式,因此不须要字符编码。字符编码只与文本文件有关。code

二、文本编辑器的输入输出是两个过程:orm

  人在操做计算机时输入的是人可以看懂的字符,计算机只能看懂01二进制数字,因此须要一个转变的过程视频

  输入的字符             >>>( 字符编码表)>>>    二进制数字

三、字符编码表就是字符与数字的对应关系。

字符编码表的发展历史:

  ASCII码表:用8位二进制数字表示一个英文字符。

    0000 0000  ~ 1111 1111

  GBK:中国发明的,统一用2个Bytes表示一个中文字符,1个Bytes表示一个英文字符。

    0000 0000 0000 0000

    对应于中国人发明的gbk编码格式,各国都有各自的编码格式,如日本的shift 韩国的 fuck

  Unicode 万国码:统一用2Bytes表示全部的字符。

    缺点:一、浪费存储空间   (英文字符为例,本来1个字节就能够表示,如今用两个字节表示,存储空间加倍)

       二、IO次数增减,程序运行效率下降(致命!)-- 由于文件变大,加载过程会变慢,因此程序运行效率会变低。

当内存中的unicode编码格式数据存到硬盘的时候,会按照utf-8编码
unicode transformation format

会将unicode的英文字符由原来的2Bytes变成1Bytes
会将unicode中文字符由原来的2Bytes变成3Bytes

注意:如今的计算机内存都是unicode,硬盘都是utf-8。

须要掌握的

unicode的两个特色
    1.用户在输入的时候,不管输什么字符都可以兼容万国字符
    2.其余国家编码的数据由硬盘读到内存的时候unicode与其余各个国家的编码都有对应关系 

必需要掌握的

数据由内存保存到硬盘
    1.内存中的unicode格式二进制数字    >>>>编码(encode)>>>>>              utf-8格式的二进制数据
    
    硬盘中的数据由硬盘读到内存
    1.硬盘中的utf-8格式的二进制数据    >>>>>解码(decode)>>>>>             内存中unicode格式的二进制数据
***** 重点:保证不乱码的规则 ----文本文件用什么编码编的就用什么编码去解。

******Python2 与Python3 的区别:
python2
    将py文件按照文本文件读入解释器中默认使用ASCII码(由于在开发python2解释器的unicode尚未盛行)
python3    
    将py文件按照文本文件读入解释器中默认使用utf-8 

文件头:

# coding:utf-8    
    1.由于全部的编码都支持英文字符,因此文件头才可以正常生效
    
基于Python解释器开发的软件,只要是中文,前面都须要加一个u
为了的就是讲python2(当你不指定文件头的时候,默认用ASCII存储数据,若是指定文件头那么就按照文件头的编码格式存储数据)
       
python3中字符串默认就是unicode编码格式的二进制数

  补充:

1.pycharm终端用的是utf-8格式
2.windows终端采用的是gbk

 字符编码总结 —— 最终的结论:

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

3、文件的基本操做

文件的处理:

一、文件的定义:

什么是文件?
    操做系统提供给用户操做复杂硬件(硬盘)的简易的接口

为何操做文件
    人或者应用程序须要永久的保存数据

二、代码操做文件的两种方式

   第一种:

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

        第二种:文件上下文操做

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

文件的处理模式

文件打开的模式:

  r 模式    w模式       a 模式

操做文件单位的方式:

  t 文本文件 : t 在使用的时候要指定encoding 参数,若是不指定就是操做系统自带的默认编码方式

  b 二进制 :  必定不能指定encoding 参数

# mode参数 能够不写  不写的话默认是rt 只读的文本文件  这个t不写默认就是t
with open(r'D:\Python项目\day07\a.txt',mode='r',encoding='utf-8') as f:
    print(f.readable())  # 是否可读
    print(f.writable())  # 是否可写
    print(f.read())  # 一次性将文件内容所有读出

 r 模式:

  r模式在打开文件时,若是文件不存在会直接报错;能够写相对路径也能够写绝对路径,但相对路径要在同一层文件下。

with open(r'a.txt',mode='r',encoding='utf-8') as f:
with open(r'a.txt','r',encoding='utf-8') as f1:  mode关键字能够不写
    print(f.readable())  # 是否可读
    print(f.writable())  # 是否可写
    print(">>>1:")
    print(f.read())  # 一次性将文件内容所有读出
    print('>>>2:')
    print(f.read())  # 读完一次以后 文件的光标已经在文件末尾了,再读就没有内容了可读
    print(f.readlines())  # 返回的是一个列表  列表中的一个个元素对应的就是文件的一行行内容
    for line in f:  # f能够被for循环 每for循环依次 读一行内容
        print(i)  # 这个方法 就能够解决大文件一次性读取占用内存太高的问题
    print(f.readline())  # 只读取文件一行内容
    print(f.readline())
    print(f.readline())
    print(f.readline())
View Code

w模式:

  w模式必定要慎用:

    当文件不存在的时候会新建文件;

    当文件存在的时候会先清空在写入内容。

a模式:

  a模式是追加写模式:

    当文件不存在的时候,会新建文件;

    当文件存在的时候,不会清空文件,鼠标的光标会在移动到文件的最后,再添加写入内容。

相关文章
相关标签/搜索