个人学习总结笔记如有不足和错误欢迎指教谢谢
文件处理模式:b
一、b模式,二进制模式,用这个模式不能指定编码,这个模式读取出来得数据是二进制数据
f = open('nnn.txt','rb')
print(f) # <_io.BufferedReader name='nnn.txt'>
data = f.read()
print(data) # b'123456\r\nabcd\r\n\xe4\xb8\x80\xe4\xba\x8c\xe4\xb8\x89\xe5\x9b\x9b\r\n'
print(data.decode('utf-8'))
f.close()
这里nnn.txt这个文件得内容是,四后面也是有回车得
123456
abcd
一二三四
1、open 默认是rt方式打开文件
2、换行符:windows是平台是“ \r\n ” Linux平台是 “\n”
3、由于源文件是使用“utf-8”编码得文件,所以解析出来得每个汉字是3个字节
4、当我们使用了命令“ print(data.decode('utf-8')) ” 用“utf-8”编码文件后,得到原文件内容
二、wb模式
这里写入得数据必须是bytes类型的数据,字符串想转换成2进制必须要经过字符编码
f = open('nnn2.txt','wb')
f.write(bytes('1111\n',encoding = 'utf-8'))
f.write('张三,李四,赵五,王六\n'.encode('utf-8'))
f.write(bytes('七八九十\n',encoding = 'utf-8'))
#因为x.encode('utf-8'),其中x就会变成bytes类型的数据
f.close()
1、bytes('x',encoding = 'utf-8') 和'x'.encode('utf-8')得效果是一样得,都是把要写入得数据进行编码
2、这个模式得其他属性和 w模式相同
三、ab模式
在文件尾部追加写入bytes类型的数据
f = open('nnn2.txt', 'ab')
f.write('今天天气不错\n'.encode('utf-8'))
f.write(bytes('挺风和日丽的\n', encoding='utf-8'))
# 在文件的最后位置加入写入字符
f.close()
源文件
1111
张三,李四,赵五,王六
七八九十
注意,十后面是有换行符号得
运行后得文件
1111
张三,李四,赵五,王六
七八九十
今天天气不错
挺风和日丽的
最后一行文字也是有换行符号得
1、这里同样要写入bytes类型的数据
2、其他得特征与a模式相同
常用命令:
1、closed 判断句柄是否释放
f = open('nnn2.txt', 'r', encoding='utf-8')
print(f.closed) # False
f.close()
print(f.closed) # True
2、encoding 显示文件打开得编码
f = open('nnn2.txt', 'r')
print(f.encoding) # cp936 就是GBK
f.close()
3、flush 刷新,将文件现有状态保存至硬盘
f = open('nnn2.txt', 'a')
print(f.flush())
f.close()
4、tell 得知光标现在得位置
f = open('nnn2.txt', 'r')
print(f.tell()) # 0
f.close()
5、seek 移动光标到指定位置
这个命令有三种模式,分别用这三个数字设置, 0 ,1 ,2,默认就是0这个模式。
read模式里面用的单位是字符
ps:字节 = utf-8 编码 或其他编码的 字节,英文字母是1个字节,汉字在utf-8里面是3个字节
字符 = ‘你’ 也就是一个汉字就是一个字符
1和2这两种模式都需要使用 二进制得模式开启文件,也就是b得模式,位移得单位是字节
0模式也就是默认模式
默认是每次都从文件开头开始计数到指定的位数
f = open('nnn2.txt', 'r')
print(f.tell()) # 0
f.seek(15)
print(f.tell()) # 15
f.close()
这里就是把光标移动到了 第15字符位置
1模式
可以设置相对的位置,也就是说从上一次光标停止的位置开始算向后移动多少位
f = open('nnn2.txt', 'rb')
print(f.tell()) # 0
f.seek(15)
print(f.tell()) # 15
f.seek(10,1)
print(f.tell()) # 25
f.close()
2模式
这个模式就是从文件最后开始计算,也就是从文件最后一个字节开始计算
f = open('nnn2.txt', 'rb')
print(f.tell()) # 0
f.seek(-15,2)
print(f.tell()) # 25
f.seek(0,2)
print(f.tell()) # 40
f.close()
这里我在文本里面写了40个数字1,末尾没有换行
ps:seek 设置得位移数字 正数代表向文章末尾移动,负数代表向文章开头移动,零代表不移动
6、truncate 截取文件从开头到第几位字节,如果()里面不写数字则表示从当前光标处截取
其中 Widnows 下的换行代表2个字节大小
f = open('nnn2.txt', 'r+',encoding='utf-8')
f.truncate(5)
f.close()
这个叫nnn2.txt得文件只会保留前5个字节