zoukankan      html  css  js  c++  java
  • 第一阶段:Python开发基础 day10 python基础知识--字符编码与文件的其他应用

    上节课内容回顾

    深浅拷贝

    深浅拷贝只针对可变类型

    拷贝

    lt = [1,2,3[4,5,6]]
    lt2 = lt
    # 当lt2 为lt的拷贝对象时,lt内部任意数据数据类型的 对象变化,lt2都变化
    

    浅拷贝

    import copy
    lt = [1,2,3[4,5,6]]
    lt2 = copy.copy(lt) # lt2 = lt.copy()
    
    # 当lt2为lt的浅拷贝对象时,lt内部可变数据类型变化,lt2也随之变化;lt内部不可变化数据类型变化,lt2不变
    

    深拷贝

    import copy
    lt = [1,2,3,[4,5,6]]
    lt2 = copy.deepcopy(lt)
    
    # 当lt2为lt的深拷贝对象时,lt内部任意数据类型的对象变化,lt2都不变化
    

    异常处理

    try:
        1/0
    except Exception as e:
        print(e)
    finally:
        print(1)
        
    # assert
    assert 1 == 1 # 满足条件跳过这一行 ; 不满足报错
    
    # raise
    raise 错误类型()  # 抛出异常
    

    数据类型分类

    可变or不可变

    可变:列表/字典/集合

    不可变:整型/浮点型/字符串/元组

    有序or无序

    有序:字符串/列表/元组

    无序:字典/集合

    一个值or多个值

    有序:整型/浮点型/字符串

    无序:列表/元组/字典/集合

    文件的基本操作

    打开文件的流程

    # 1.打开文件
    f = open(file_path,'r')
    # 2.读写操作
    f.read() / f.write()
    # 3.关闭文件
    f.close()
    

    一、字符编码

    1.1 计算机基础

    1. cpu: 控制程序的运行(从内存中取出文本编辑器的数据读入内存)
    2. 内存:运行程序(经cpu操作后,内存汇总含有文本编辑器的数据)
    3. 硬盘:存储数据(文本编辑器)

    1.2 文本编辑器

    计算机只认识 0 和 1

    文本编辑器的作用:读写数据,保存数据

    1.3 python解释器

    具有文本编辑器的功能

    010100101010101 --> a = 1 # 5个很普通的字符,python解释器没有运行的时候提供的 # 字符编码

    定义变量就要开辟内存空间存放变量,内存只认识 0 和 1 也就是说,a = 1 --> 010101010010101 需要一定的 0 和 1 表示他为字符串,python 解释器运行的时候提供的 # python3 和 python2字符编码的区别

    1.4 字符编码

    字符编码:二进制和你所能认识的字符之间的相互转换的一个过程

    早期的美国使用ascii码

    然后中国人发明了gbk编码

    再然后日本人造了shift编码

    世界上出现了各种各样的编码

    unicode: 认识万国语言,万国编码

    unicode: 把8位的英文变成了16的英文,多占用了内存空间

    1.5 什么情况会乱码

    编码格式不统一

    文本编辑器支持的是utf8 ,你输入的是gbk --> 文件的存储

    文件存储用了utf8 , 但是下次打开用了gbk --> 文件的读取

    1.6 乱码的两种情况

    中文的文本编辑器只认识中文,然后你输入了日本 --> 乱码 # encode 编程

    文本编程器存储了中文(文件),但是你用了日本的编辑器打开这个文件--> 乱码 # decode 解码

    1.7 解码乱码

    什么格式存储,就什么格式读取,就不会乱码

    windows电脑的记事本默认为gbk编码,除此之外其他的软件默认编码为utf8

    二、python2和python3字符编码的区别

    2.1 python解释器运行代码的流程

    ​ 1.启动python解释器(相当于文本编辑器)

    ​ 2.打开文件,显示这个字符并检查语法(涉及字符编码,a = 1 只是一个很普通的字符)

    ​ 3.解释字符(涉及字符编码,再去内存空间,生成一个a = 1的变量)

    python2用的是ascii , python3默认是utf8读取字符

    # coding:gbk 会告诉python3 解释器用gbk编码读取字符

    python3(了解)

    你看到的其实是unicode

    但是终端帮你把这个unicode的0和1做一个转换,从unicode 转换成了终端能够识别的编码格式,然后变成中文

    # coding:gbk
    a = '中文'
    print (a)
    

    假设终端的默认编码是gbk,认识unicode编码的变量

    假设终端的默认编码是utf8,认识unicode编码的变量

    python2(了解)

    unicode + 指定的coding 编码(str类型)

    # coding:gbk
    a = '中文'        # 用gbk编码存储了这堆0和1
    b = u'中文'       # 用unicode编码存储了这堆0和1
    print(a)         
    

    终端是一个文本编辑器,会有默认编码

    假设终端的默认编码是gbk,认识gbk编码的变量

    假设终端的默认编码是utf8,不认识gbk编码的变量

    三、文件的三种打开模式

    文件的操作模式有三种(默认的操作模式为r模式):

    • r 模式为read
    • w 模式为write
    • a 模式为append

    文件读写内容的格式有两种(默认的读写内容的模式为b模式):

    • t模式为text
    • b模式为bytes

    需要注意的是:t、b这两种模式均不能单独使用,都需要与r/w/a之一连用

    3.1 文件打开模式之r模式

    ​ r:read ,只读模式,只能读不能写,文件不存在时报错。

    f = open('32.txt', mode='r')  # 报错
    f.write()
    f.close()
    

    ​ f.read() 读取文件指针会跑到文件的末端,如果再一次读取,读取的将是空格。

    ​ 由于f.read()一次性读取文件的所有内容,如果文件非常大的话,可能会造成内存爆掉,即电脑卡死。因此可以使用f.readline()/f.readlines()读取文件内容。

    # f.readline()/f.readlines()
    f = open('32.txt', mode='rt', encoding='utf8')
    print(f"f.readable(): {f.readable()}")  # 判断文件是否可读
    data1 = f.readline()
    data2 = f.readlines()
    print(f"data1: {data1}")
    print(f"data2: {data2}")
    f.close()
    

    3.2 文件打开模式之w模式

    w: 只能写,不能读,文件存在的时候就会清空文件后再写入内容;文件不存在的时候会创建文件后写入内容。

    # wt
    f = open('34w.txt', mode='wt', encoding='utf8')
    print(f"f.readable(): {f.readable()}")
    f.write('nick 真帅呀
    ')  # '
    '是换行符
    f.write('nick,nick, you drop, I drop.')
    f.write('nick 帅的我五体投地')
    f.flush()  # 立刻将文件内容从内存刷到硬盘
    f.close()
    

    3.3 文件打开模式之a模式

    a : 可以追加。文件存在,则在文件的末端写入内容;文件不存在的时候会创建文件后内容。

    # at
    f = open('34a.txt', mode='at', encoding='utf8')
    print(f"f.readable(): {f.readable()}")
    f.write('nick 真帅呀
    ')  # '
    '是换行符
    f.write('nick,nick, you drop, I drop.')
    f.write('nick 帅的我五体投地')
    f.close()
    

    3.4 文件打开读取二进制

    b 模式是通用的模式,因为所有的文件在硬盘中都是以二进制的形式存储的,需要注意的是:b模式读写文件,一定不能加上encoding参数,因为二进制无法再编码。

    try:
        import requests
    
        response = requests.get(
            'http://www.chenyoude.com/Python从入门到放弃/文件的三种打开模式-mv.jpg?x-oss-process=style/watermark')
        data = response.content
    
        f = open('mv.jpg?x-oss-process=style/watermark', 'wb')
        f.write(data)
        print('done...')
        f.close()
    except Exception as e:
        print(e, '报错了,那就算了吧,以后爬虫处会详细介绍')
    

    四、with管理文件操作上下文

    之前我们使用open() 方法操作文件,但是open打开文件后我们需要手动释放文件对操作系统的占用。但是其实我们

    可以更方便的打开文件,即python提供的上下文管理工具---with open()

    with open('32.txt', 'rt', encoding='utf8') as f:
        print(f.read())
    

    with open() 方法不仅提供自动释放操作系统占用的方法,并且with open 可以使用逗号分隔,一次性打开多个文件,实现文件的快速拷贝。

    with open('32.txt','rb') as fr,
    	open('35.txt','rwb') as fw:
        f.write(f.read())
    

    课后练习

    https://www.cnblogs.com/foreversun92/p/11317149.html

    今日小结

    ​ 今天主要讲了计算机基础知识的字符编码这一块的知识,以及python2和python3字符编码的区别。当然这些概念性的东西仅做了解就可以了,只需要记住什么格式存储,就什么格式读取,就不会乱码这个点就可以了。之后又讲了文件的三种打开方式,已经with open的使用方法。python对文件这块的操作,具体没有太多的内容,大致就是这些,熟练掌握,可以灵活运用就可以了。

  • 相关阅读:
    格式化数字,将字符串格式的数字,如:1000000 改为 1 000 000 这种展示方式
    jquery图片裁剪插件
    前端开发采坑之安卓和ios的兼容问题
    页面消息提示,上下滚动
    可以使用css的方式让input不能输入文字吗?
    智慧农村“三网合一”云平台测绘 大数据 农业 信息平台 应急
    三维虚拟城市平台测绘 大数据 规划 三维 信息平台 智慧城市
    农业大数据“一张图”平台测绘 大数据 房产 国土 农业 信息平台
    应急管理管理局安全生产预警平台应急管理系统不动产登记 测绘 大数据 规划 科教 三维 信息平台
    地下综合管廊管理平台测绘 大数据 地下管线 三维 信息平台
  • 原文地址:https://www.cnblogs.com/foreversun92/p/11318446.html
Copyright © 2011-2022 走看看