字符编码及文件操作

一,字符编码

1,什么是字符编码

  计算机要想工作必须通电,也就是说‘电’驱使计算机干活,而‘电’的特性,就是高低电平(高低平即二进制数1,低电平即二进制数0),也就是说计算机只认识数字

  很明显,我们平时在使用计算机时,用的都是人类能读懂的字符(用高级语言编程的结果也无非是在文件内写了一堆字符),如何能让计算机读懂人类的字符?

  必须经过一个过程:

  字符--------(翻译过程)------->数字 

  这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之为字符编码

2,字符编码的使用

上图所示,就是文本编辑器储存文件和编辑文件的过程:首先运行文本编辑器这个应用软件,然后将要打开的文件通过decode解码成unicode形式读到内存中。

最后储存的时候是存到硬盘中的,为了节省资源,存储过程中,将unicode格式的二进制数在通过encode编码的过程存到硬盘中。

但注意的一点是:用什么编码就要用什么解码,不然就会出现乱码的情况。

unicode跟utf-8的区别:

首先它们都是万国码,可以兼容各个国家的语言,但unicode把所有的语言都存成两个字节,对于一些不需要占用两个字节的语言来说(一个字节就可以搞定的语言)

太浪费空间,所以就产生了utf-8,它可以判断字节的大小,从而省下了一定的内存空间,所以在硬盘中存储一般du用utf-8,但是因为要判断,所以运行速度明显降低,

所以内存中就用unicode。

Python解释器执行代码的过程:

  读取已经加载到内存的代码(unicode编码的二进制),然后执行,执行过程中可能会开辟新的内存空间。

  而执行过程中的编码就可以放任何形式的编码了,python3默认的是utf-8的格式,而python2默认的是ASCII码格式。

  可以在文件开头用#coding:utf-8更改默认格式。

二,文件操作

1,文件操作流程

  1. 打开文件,得到文件句柄并赋值给一个变量
  2. 通过句柄对文件进行操作
  3. 关闭文件

2,基本操作

r 读文件

# f=open('1.1.py',encoding='utf-8')#打开文件
# print(f.readable(),end="") #查看文件是否可读
# print(f.readline(),end="")#读一行
# print(f.readline(),end="")
# print('-'*60)#这是分割线
# print(f.read())#读剩下的文件
# f.close()#关闭文件

w写文件

# f=open('wxp.txt','w',encoding='utf-8')
# f.write('我有一头小毛驴
')#写入文件
# f.writelines(['我从来都不骑
','有一天我心血来潮
'])#写多行
# f.close()

a追加

# f=open('wxp.txt','a',encoding='utf-8')
# f.write('骑它去赶集
')
# f.writelines(['握握手
','敬个礼
'])
# f.close()

3,文件打开模式

打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。

打开文件的模式有:

  • r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
  • w,只写模式【不可读;不存在则创建;存在则清空内容】
  • x, 只写模式【不可读;不存在则创建,存在则报错】
  • a, 追加模式【可读;   不存在则创建;存在则只追加内容】

"+" 表示可以同时读写某个文件

  • r+, 读写【可读,可写】
  • w+,写读【可读,可写】
  • x+ ,写读【可读,可写】
  • a+, 写读【可读,可写】

 "b"表示以字节的方式操作

  • rb  或 r+b
  • wb 或 w+b
  • xb 或 w+b
  • ab 或 a+b

 注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

4,上下文管理

with open('wxp.txt','a',encoding='utf-8') as f : #这样打开就不用关闭了,自动会关闭。
    f.read()

5,文件的修改

import  os
with open('wxp.txt','r',encoding='utf-8') as f_read,
    open('wxp_swap','w',encoding='utf-8') as f_write:
    for line in f_read:
        data=line.replace('','')
        f_write.write(data)
os.remove('wxp.txt')
os.rename('wxp_swap','wxp.txt')
原文地址:https://www.cnblogs.com/wxp5257/p/7230840.html