字符编码、文件处理

Day07

复习

运行程序的三个核心硬件:CPU、内存、硬盘

Python解释器运行一个py文件的步骤:

  • a.将Python解释器从硬盘读到内存

  • b.将py文件以普通文本文件的形式读到内存

  • c.解释器识别Python语法,执行响应的操作

  • ps:普通文本编辑器和Python解释器前两部都是一样的

字符编码

是什么:字符编码就是字符与数字的对应关系

发展史

阶段一:现代计算机起源于美国,最早诞生也是基于英文考虑的ASCII
阶段二:为了满足中文和英文,中国人定制了GBK
阶段三:各国有各国的标准,就会不可避免地出现冲突,
		结果就是,在多语言混合的文本中,显示出来会有乱码
解决方案:unicode 和 UTF-8
  • 总结

    • 内存中统一采用unicode,浪费空间来换取可以转换成任意编码(不乱码)

    • 硬盘可以采用各种编码, 如utf-8,保证存放于硬盘或者基于网络传输的数据量很小,提高传输效率与稳定性。

unicode特点

  • 能够兼容万国字符

  • 与全世界所有的字符编码都有映射关系,这样就可以转换成任意国家的字符编码

注意

  • 保证不乱码在于:文本文件以什么编码编的就以什么编码解

  • Python2和Python3的区别

    • Python2:将py文件按照文本文件读入解释器中默认使用ASCII码(因为在开发python2解释器的unicode还没有盛行)

    • Python3:将py文件按照文本文件读入解释器中默认使用utf-8

  • 文件头

    • coding:utf-8 :因为所有的编码都支持英文字符,所以文件头才能够正常生效

      基于Python解释器开发的软件,只要是中文,前面都需要加一个u

    • 举个例子:python2中(当你不指定文件头的时候,默认用ASCII存储数据,如果指定文件头那么就按照文件头的编码格式存储数据)

补充

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

总结

  • encode('utf-8')将unicode编码成可以存储和传输的utf-8的二进制数据

  • decode('utf-8')将硬盘中的utf-8格式的二进制数据解码成unicode格式的二进制数据

文件处理

复习

  • 什么是文件:操作系统提供给用户操作复杂硬件的建议接口

  • 为什么操作硬件:人或者应用程序需要永久的保存数据

操作文件的方法

  • f = open()

    • 人或者应用程序,通过操作系统操作硬件的

    • f = open(文件路径,编码格式) f = open(r'D:\Python项目\day07\a.txt',encoding='utf-8') # r表示取消转义 print(f) # f是文件对象

  • f.read() # 向操作系统发请求 读取文件内容

  • f.close() # 告诉操作系统 关闭打开的文件

  • 演示

    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参数 如果不写encoding则默认是操作系统的默认编码

  • b ,二进制 ; 一定不能指定encoding参数

演示1:

# 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())  # 一次性将文件全部读出来
#输出结果
True
False
AAAAAAAAAAAAAA

Process finished with exit code 0

 演示2:

with open(r'a.txt','r',encoding='utf-8') as f:
    print(f.readable())  # 是否可读
    print(f.writable())  # 是否可写
    print('>>>1:')
    print(f.read())  # 一次性将文件内容全部读出
    print('>>>2:')
    print(f.read())
    print('>>>:结束')# 读完一次之后,文件的光标已经在文件末尾了,再读就没有内容可读了
#输出结果
True
False
>>>1:
AAAAAAAAAAAAAA
BBBBBBBB
>>>2:

>>>:结束 

演示3:

with open(r'a.txt','r',encoding='utf-8') as f:
    print(f.readlines())  # 返回的是一个列表,列表中的一个个元素对应的就是文件的一行行内容
    print(f.read())
    print('>>>:结束')
#输出结果
['AAAAAAAAAAAAAA\n', 'BBBBBBBB']

>>>:结束

演示4:

with open(r'a.txt',mode='r',encoding='utf-8') as f:
    print(f.readline())  # 只读取一行内容,读完本行后,光标跳到了下一行
    print(f.readline())
    print(f.readline())
    print(f.readline())
    print('>>>:结束')
#输出结果
AAAAAAAAAAAAAA

BBBBBBBB


>>>:结束

演示5:

with open(r'a.txt',mode='r',encoding='utf-8') as f:
    for i in f:  # f可以被for循环,没for循环一次,读一行内容
        print(i)  # 这个方法就可以解决大文件一次性读取占用内存过高的问题
print('结束')
#输出结果
AAAAAAAAAAAAAA

BBBBBBBB
结束

 

posted @ 2019-07-05 20:31  不在一城  阅读(144)  评论(0编辑  收藏  举报