字符编码及文本一

字符编码与文件处理

1、前置知识点:

​ 一、程序执行的三大核心硬件(***):
​ cpu
​ 内存
​ 硬盘
​ 正常执行一个程序的要点:
​ 一、将硬盘中的数据读到内存
​ 二、由cpu读内存中的数据进行执行
​ 三、在执行程序的时候,生成的数据,优先存入内存python

二、python解释器执行一个py文件过程(***)
    若是没有python解释器,py文件单纯就是一个文本文件
    因此说,想执行py文件,必须先执行python解释器

    一、将python解释器的代码有硬盘读到内存
    二、将py文件以普通文本文件的格式由硬盘读到内存
    三、python解释器去内存中读取py文件的数据
    四、识别python语法,执行相应的操做

    ps:任何一个文本编辑器的执行,前两部都同样

2、字符编码:

​ 字符:世界上一切语言、文字
​ 有必要考虑,图片文件、音频文件、视频文件?windows

文件的输入和输出是两个过程

人类输入的内容都是人类本身能够识别的字符

计算机只能识别0101010二进制字符

将人类的字符,存入内存和硬盘,要经历一个过程:

人类的字符  >>>>>>>     (字符编码表)    >>>> 计算机二进制

0 a
1 b
01 a
10 b
00 c
11 d

ASCII码表(美国)
    用八位二进制来表明一个英文字符(全部的英文字符+符号一共大概128左右)
        0000 0000
        1111 1111
        最多只能表示255位


    八位二进制 = 8 bit
    8 bit = 1 bytes
    1024bytes = 1KB
    1024KB = 1MB
    1024MB = 1GB
    1024GB = 1TB
    1024TB = 1PB

GBK(中国)
    用2个bytes来表明一个字符,兼容英文字符
    0000 0000 0000 0000
    1111 1111 1111 1111
    最多能够表示65535位

shit(小日子过得不错的日本人)

fuck(韩国的)

万国码(unicode)

为了兼容全部的国家的字符,生成unicode
    全部的字符都用2bytes
    0101 0101 a
    0000 0000 0101 0101 a
    一、占用存储空间
    二、io次数增长,程序运行速度变慢(最致命)

在unicode二进制数据存入硬盘的时候,作优化

utf-8:
    utf-8只与unicode有对应关系
    unicode transformation format

    全部的英文字符用1个bytes表示
    全部的中文字符用3个bytes表示

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

3、结论

须要掌握:
    一、用户不管输入什么字符,存入内存,unicode均可以兼容
    二、硬盘中不管是什么编码的文件,读到内存,均可以兼容unicode

数据的传输:
    优先以本身的本国字符编码进行传递


必须掌握(******)#五星级
    (内存)unicode二进制字符 >>>  编码(encode)  >>> (硬盘)utf-8二进制字符
    (硬盘)utf-8二进制字符  >>>   解码(decode)  >>> (内存)unicode二进制字符

(******)
保证不乱码核心:
    用什么编码存的数据,就用什么编码取

python2 :
    默认的字符编码ascii码(由于当时的unicode还没盛行)
python3:
    默认的字符编码utf-8

文件头:
    # coding:utf-8
    用英文字符,是为了让全部的计算机均可以识别


pycharm默认的字符编码是:
    utf-8
windows操做系统默认字符编码:
    gbk

4、深浅拷贝

import copy
l1 = [257, 'a', [4, 5, 6]]
print(l1)
print(id(l1))
# print(id(l1[0]))
l2 = copy.deepcopy(l1)  # [1, 'a', [4, 5, 6]]
l2[2][0] = 4444
print(l2)
print(id(l2))
print("l1:", l1)
print("id_l1:", id(l1))

这里只须要了解便可,结论就是:
浅copy只是把大框架拿了过来,,而里面的值仍是与原来同样,即ID也同样,若改变大框架里面的小列表中的值,copy后小列表中的ID以及原小列表的ID都会改变。
深copy就是不止把大框架拿了过来,而把小框架里的东西都拿了过来,改变小列表中的值,这个小列表的ID会变,而原小列表ID不变。

5、文件处理

一、什么是文件?框架

操做系统给你提供操做硬盘的一个工具编辑器

二、为何要用文件?工具

为了知足人类和计算机永久保存数据优化

三、怎么用文件?编码

相对路径:必须与当前文件在同一目录操作系统

绝对路径:固定的只能在这台电脑操做code

四、经常使用的字符意愿orm

'r'             以只读方式打开文件(默认)
'w'             以写入的方式打开文件,注意会已存在的文件,即将已有的文件删除
'x'             若是文件已存在,用此方式打开会发生异常
'a'             以写入的方式打开,若是文件存在,会在末尾追加写入
'b'             以二进制打开,主要用于图片,视频
't'             以文本的方式打开
'+'             能够将r+w变成可读写模式
'u'             通用换行符

五、文件处理

f = open("a.txt")

print(f.readable())  # 判断当前文件是否可读
print(f.writable())  # 判断当前文件是否可写

# del f  # 回收变量资源
f.close()  # 回收操做系统的资源


with open('a.txt',mode='r')as rf,\
        open('a.txt',mode='w')as wf:  # with会自动帮你回收操做系统的资源,无需本身操做
    print(rf.readable())
    print(wf.writable())

# r进行转义
with open(r'D:\项目路径\python13期\day07\a.txt')as f:
    print(f.read())   # 读取文件

六、文件处理模式

with open(r'th.jpg', mode='rb')as rf,\
        open('xiawuchameilv.png', mode='wb')as wf:
    xiawuchameilv = rf.read()
    wf.write(xiawuchameilv)
"""
打开文件的三种模式:
    r :
        一、只读
        二、若是文件不存在,会报错
    w:(慎用)
        一、只写
        二、若是文件不存在,则新建一个文件写入数据
        三、若是文件内存在数据,会将数据清空,从新写入
    a:
        一、追加写
        二、若是文件内存在数据,会在已有数据的后面追加数据
        三、若是文件不存在,则新建一个文件写入数据
处理文件的模式:
    t
    b
"""

七、文件打开模式

with open(r'a.txt', 'r', encoding='utf-8')as f:
    print(f.readable())
    print(f.read())
    print(f.readline())  # 执行一次,打印一行内容
    print(f.readlines())
    print(f.read())
    print(f.readable())
    print(f.read())
>>>True
亚峰666

[]

True

with open(r'b.txt', 'w', encoding='utf-8')as f:
    f.writelines(["干巴爹\n",'加油'])
>>>干巴爹
   加油

with open(r'aaaaa.txt','a',encoding='utf-8')as f:
    print(f.writable())
    f.write("\n努力,奋斗")
>>>努力,奋斗

相关文章
相关标签/搜索