编码指的是把文字翻译成二级制的一个过程,有许多不同的对应规则,也就有许多不同的编码规范
例如,UTF-8,GBK,Big5,Unicode等
所谓乱码就是使用了错误的编码方式打开了文件的内容(大概),因此我们也可以选择编码的方式
目前UTF-8是全球通用的编码格式,一般来说文件内容都是UTF-8的
文件可以分为许多类别,在不同操作系统下文件的类型也不同,我们以常见的Windows系统为例,他以后缀名区分文件的类型,例如txt为文本文件,mp4为视频文件,exe为可执行文件等众多类别
对于文件的操作也有,打开,关闭,读写,执行等
我们以最简单的txt文本文件为例,对文件的操作就是,打开,读写,关闭
在Python中,我们使用open函数可以打开一个已经存在的文件,或者创建一个新的文件,语法如下
open(name,mode,encoding)
这里的name是文件名,mode是表示打开文件的方式即访问模式,对应着只读,写入,追加等,encoding表示文件的编码格式
例如
file = open('text1.txt','r',encoding='UTF-8')
这里需要注意的是,encoding的传参位置不是第三位,因此需要使用关键字传参
这里的file实际上是一个文件对象(object),对象是一种特殊的可以自定义的数据类型,在下一部分我们会进行详解
这里我们详细介绍一下mode的内容
mode有三种常用的基础访问模式
‘r’ 表示以只读的方式打开文件,也是默认的模式
‘w’ 表示以写入的方式打开文件,如果文件不存在则会创建新文件,如果文件已经存在,会从头开始写入,原来存在于文件中的内容将会清空
‘a’ 表示以追加方式打开文件,与’w’类似,只是如果文件存在,则会写入到原有内容之后
语法:文件对象.read(num)
num表示从文件中读取的数据的长度,可以不传入,默认读取所有数据
语法与read()类似,与之不同的是他将每一行作为列表的每一个元素进行读取,之后进行返回
例如
file = open("text.txt")
print(file.readlines())
# 结果是['Hello World!\n','你好,世界!']
file.close() # 关闭文件
这里与上面不同的是只读取一行的内容,因此我们可以通过for循环对整个文件进行读取
close() 方法用于关闭文件,如果在文件使用完毕之后不关闭,他将会一直被占用
with open() 语法
with open("text.txt",'r') as f:
f.readlines()
print(f)
在这个代码块结束之后,文件会自动关闭,避免遗忘
f = open('text.txt','w')
f.write('hello!')
f.flush()
f.close()
注意,在执行到write语句时,内容并没有真正全部写入到文件中,而是会积攒到程序的内存中,也称之为缓冲区,直到调用flush的时候,才会真正写入文件,因为频繁访问硬盘,会导致运行效率不高
与文件写入基本一模一样,只需要对打开方式进行改变即可,同样调用write()方法