Python学习 22 - 文件处理 (补充)

个人学习总结笔记如有不足和错误欢迎指教谢谢

文件处理模式: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个字节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值