六、字符编码和文件处理

一、字符编码

1、Python解释器执行Python程序的原理

第一阶段:先启动Python解释器这个软件

第二阶段:把.py文件的内容读入内存

第三阶段:解释执行,识别语法

2、什么是字符编码?

字符编码就是字符与数字一一对应关系的标准。

8bit(比特) = 1bytes(字节)

一个英文字符占用1个bytes,也就是8bit,也叫ASCII码

GBK:2个字节表示一个中文字符,1个字节表示一个英文字符

unicode:2个字节表示一个字符(中文、英文等也是2个字节)

utf-8:unicode的一种转换版本,1个字节表示一个英文字符,3个字节表示一个中文字符

内存固定为unicode编码,不能修改。我们能控制的只是存到硬盘上的编码。

3、指定编码

python3解释器默认用utf-8编码,python2解释器默认用ASCII编码

乱码的根本解决方法:文件存取用同一种编码标准(如utf-8)

python中指定编码,在文件头写下:#coding:utf-8

unicode转成gbk,utf-8叫编码encode

gbk,utf-8转成unicode叫解码decode

二、文件处理

文件是操作系统提供给应用程序操作硬盘的一个虚拟单位,用于应用程序将数据永久保存。

1、文件操作步骤:打开文件----读/写----关闭文件

文件打开语法:

open(r'文件的路径', mode = '打开文件的模式', encoding = '操作文件的字符编码')

python提供了自动打开和关闭文件,语法:

with open(r'文件的路径',mode='打开文件的模式',encoding='操作文件的字符编码') as 变量名:

2、文件操作方法:

读:

.read()     读出文件所有的内容,光标移到文件末尾

.readline()     一次读一行,光标移到第二行行首

.readlines()    读出文件所有的内容,以行为单位,存在列表中

写:

.write()     针对文本模式的写,需要自己写换行符

.writelines()    把列表或元组里面的值取出来,放进文件中

循环读取文件每一行的方式:

for line in f:

    print(line, end='')

3、文件的打开模式

t,b

1)、t模式:

text文本模式,只能读写文本文件。读写文件是以字符串为单位,需要指定字符编码

2)、b模式:

读写都是以bytes字节为单位,与t模式类似,不能单独使用,必须是rb、wb、ab,b模式下一定不能指定encoding字符编码

4、文件的操作模式

r(read),w(write),a(append)

r:只读模式,文件不存在则报错;文件存在,光标停在文件开头

w:只写模式,当文件存在时,清空;当文件不存在时,创建空文档,光标停在文件开头

a:只追加写模式,当文件不存在时,创建空文档;当文件存在时,光标直接跑到末尾(大多用于记录日志)

5、修改文件的方式

方式一、先把文件全部读入内存----然后在内存中完成修改----再把修改后的结果覆盖写入原文件

缺点:会在内容过大的情况下,占用过多的内存

方式二、以读的方式打开原文件,以写的方式打开一个新文件----读一行原文件内容,如果该行内容时需要修改的内容,则写入新文件----删掉原文件,将新文件重命名为原文件

6、拷贝文件

解释器交互式拷贝命令:python src_file_path dst_file_path

py文件拷贝文件代码:

import sys

i = sys.argv    #这一行的意思是把命令行中解释器后所有的参数都存成列表

print(i)

src_file_path = i[1]

dst_file_path = i[2]

with open('原文件路径', mode = 'rb') as src_file,

        open('拷贝文件路径', mode = 'wb') as dst_file:

for line in src_file:

    dst_file_write(line)

原文地址:https://www.cnblogs.com/Python1/p/8719167.html