zoukankan      html  css  js  c++  java
  • 文件处理

    一、字符编码

    1.1 文本编辑器存取文件的原理

    ​ 打开编辑器就打开了一个进程,实在内存中进行的,编辑器书写内容也都是存放在内存之中的,断电后数据丢失。

    ​ 若需要永久保存,需要对文件进行永久保存,编辑器把内存的数据刷到硬盘上。

    ​ 编辑一个没有执行的py文件,和编写其他文件没有任何区别,都只是在编写一堆字符。

    1.2 Python解释器执行py文件的原理

    1. Python解释器启动,就相当于启动了一个文本编辑器。
    2. Python解释器相当文本编辑器,打开test.py文件,从硬盘上将test.py文件读入内存中。
    3. Python解释器解释执行刚刚加载到内存中的test.py的代码。

    1.3 Python解释器与文本编辑器的异同

    ​ 相同点:Python解释器是解释执行文件内容的,因而Python解释器具备读py文件的功能。

    • 不同点:文本编辑器将文件内容读入内存后,目的是是为了显示或者编辑,没有固定的输入语法。而Python解释器将文件内容读入内存后,目的是为了执行Python代码,对内容有固定的语法要求。

    1.4 字符编码简介

    1.4.1 什么是字符编码

    ​ 计算机硬件工作是使用复杂的二进制字符进行命令的传输的,而我们是使用人类的语言就行交流的,因此我们需要将我们的语言进行转换成为计算机语言,需要这样一个过程:字符-->翻译-->数字。

    ​ 总而言之,字符编码是将人类的字符编码成计算机能识别的数字,这种转换必须遵循一套固定的标准,是人类字符与数字的对应关系,称之为字符编码表。

    1.4.2 涉及字符编码的两个场景

    1. 一个Python文件中的内容是由一堆字符组成的,存取均涉及到字符编码问题。
    2. Python中的数据类型字符串是由一串字符组成的。

    1.4.3 乱码分析

    1. 存文件是已经产生乱码
    2. 存文件是没有乱码而读文件是产生乱码

    1.4.4 总结

    ​ 保证不乱码的核心法则就是,字符按照什么标准而编码的,就要按照什么标准解码,此处的标准指的就是字符编码。

    二、Python2和3字符编码的区别

    代码详情 Python2执行情况 Python3执行情况
    # coding:gbk
    print('中')
    终端:utf8
    乱码 不乱码
    # coding:utf8
    print('中')
    终端:utf8
    不乱码 不乱码
    # coding:gbk
    print(u'中')
    终端:utf8
    不乱码 不乱码
    # coding:utf8
    print(u'中')
    终端:utf8
    不乱码 不乱码

    ​ 在Python2中如果指定了字符编码,那么内存存取就会按照指定的字符编码去入进行命令执行,否则就会乱码。 可以在定义变量前面加上u,这样变量就会以unicode编码存入内存。

    如:

    #coding:gbk
    
    name = "爸爸"
    

    ​ 但在Python3中就不会有这样的问题,因为无论指定了什么字符编码,在内存存取时都会使用Unicode编码去入内存,Unicode编码可以和任意的字符编码相互转换,并在读取时按照所需的编码区读取,这样就很好解决了字符编码的问题。

    三、文件的三种打开模式

    ​ 文件操作的基础模式有三种(默认的操作模式为r模式):1. r模式为read,2. w模式为write,3. a模式为append。

    ​ 文件读写内容的格式有两种(默认的读写内容的模式为b模式):1. t模式为text,2. b模式为bytes。

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

    3.1 r模式

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

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

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

    ​ f.readline是可以每次读取一整行,而f.readlines是将文本全部读出,但是和read不同的是,f.readlines是使用容器(列表)进行存储的,每一行都默认有换行。

    3.2 w模式

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

    3.3 a模式

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

    3.4 b模式

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

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

    ​ 之前我们使用open()方法操作文件,但是open打开文件后我们还需要手动释放文件对操作系统的占用。但是其实我们可以更方便的打开文件,即Python提供的上下文管理工具——with open()。

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

  • 相关阅读:
    斐波那契数列相关
    社论CF1616G
    题解AGC056
    IOI2018 meetings
    题解UOJ#696. 【候选队互测2022】理论复杂度
    larval5.1模型静态使用多次出现查询属性信息存在问题
    SQL Server里面可能经常会用到的日期格式转换方法
    asp.net页面刷新后样式就发生了改变
    [武汉站]Windows 7 社区发布活动
    C++/CLI学习入门数组
  • 原文地址:https://www.cnblogs.com/tangceng/p/11317225.html
Copyright © 2011-2022 走看看