python中的文件处理
引言
我们学习编程就是为了自动化办公,因此用代码操作文件很重要今天来讲点文件处理操作。

字符编码实际应用
1. 编码与解码
编码
将人类能够读懂的字符编码成计算机能够直接读懂的字符
解码
将计算机能够直接读懂的字符解码成人类能够读懂的字符
s1 = '我是你爸爸,叫爸爸快'
res = s1.encode('gbk')
print(res) # b'\xce\xd2\xca\xc7\xc4\xe3\xb0\xd6\xb0\xd6\xa3\xac\xbd\xd0\xb0\xd6\xb0\xd6\xbf\xec'
'''
字符串前面的b是表示该数据类型为 bytes类型
bytes类型可以看成二进制
'''
print(res.decode('gbk')) # '我是你爸爸,叫爸爸快'
'''
基于网络传输数据 数据都必须是二进制格式
因此肯定要涉及到编码与解码
'''
2. 如果出现了乱码就应该让数据当初以什么编码编的就以什么编码解。记住了gbk的编码不能用shift_JIS和utf8的编码来解码,会报错,他们的进制数不同不能互相解码。
3. python解释器层面
python2解释器默认的编码是ASCII码
1. 文件头:必须写在文件的最上方,告诉解释器使用指定的编码
# coding:utf8
# -*- coding:utf8 -*- 美化写法
2. 字符前缀:在使用python2解释器的环境下定义字符串习惯再前面加u
python3解释器默认的编码是utf8
文件操作简介
文件是操作系统暴露给用户可以直接操作硬盘的快捷方式
# 代码操作文件的流程
1.打开文件、创建文件
2.编辑文件内容
3.保存文件内容
4.关闭文件
# 基本语法结构
结构1(了解即可):
f1 = open() # 打开文件
f1.close() # 关闭文件
结构2(推荐使用):
with open() as f:
pass
# 使用关键字打开文件
'''
写路径为了防止转义,直接在字符串的引号外面加个r
'''
with open(r'D:\py1\day09\a.txt', 'r', encoding='utf8') as f:
pass
'''
上述代码不用写close,因为子代码执行完毕会自动关闭文件
pass和...都是不全语法结构,本身没功能
open(文件的路径,文件的操作模式,文件的编码)
1. 文件的路径是必须要写的
2. 文件的操作模式、文件的编码有时候不用写
'''

文件的读写模式
r read 只读,写会报错
w write 只写,读会报错,且文件不存在就新建一个文件,文件存在会先清空文件内容
a append 只追加,读会报错,在文件末尾添加内容,文件不存在新建文件
with open(r'a.txt','r',encoding='utf8') as f1:
print(f1.read()) # 一次性读取文件所有内容
f1.write('dasdajk') # 报错,只读
'''
如果不明确可以用方法readable看是否具有读的能力
writable看是否有写的能力
'''
文件的操作模式
t模式
文本模式 是默认的模式
r rt
w wt
a at
1.该模式只能操作做文本文件
2.该模式必须要指定encoding参数
3.该模式读写都是以字符串为最小单位
b模式
二进制模式 可以操作任意类型的文件
rb 不能省略b
wb 不能省略b
ab 不能省略b
1.该模式可以操作任意类型的文件
2.该模式不需要指定encoding参数
3.该模式读写都是以bytes类型为最小单位
文件内置方法
read() # 一次性读取文件内容
1.执行完之后光标在文件末尾 继续读取没有内容
2.当文件内容特别大的时候 容易造成内存溢出(满了)
readline() # 一次只读一行内容
readlines() # 结果是一个列表 里面的各个元素是文件的一行行内容
readable() # 判断当前文件是否可读
支持for循环 # 一行行读取文件内容(推荐使用) 内存中同一时刻只会有一行内容
write() # 写入文件内容(字符串或者bytes类型)
writelines() # 可以将列表中多个元素写入文件
writable() # 判断文件是否可写
flush() # 相当于主动按了ctrl+s(保存)
