首页 > 编程语言 > 详细

python课堂整理18---文件操作(下)

时间:2019-07-08 16:32:27      阅读:111      评论:0      收藏:0      [点我收藏+]

一、b模式,字节方式(二进制的单位),rb  wb  ab

f = open(‘test.py‘, ‘rb‘, encoding = ‘utf-8‘)

技术分享图片

报错,因为用了b模式,就不能再指定编码格式了,已经指定读成二进制。

技术分享图片

f = open(‘test.py‘, ‘rb‘)
data = f.read()
print(data)

技术分享图片

因为test文件内容是以utf-8的格式写入的,一个中文占三个字节

在Windows下,换行符就是 \r\n

#字符串------->转为二进制-------->硬盘

即:‘字符串’------>encode-------->bytes(编码过程)

  bytes-------->decode--------->‘字符串‘(解码过程)

解码:

f = open(‘test.py‘, ‘rb‘)
data = f.read()
print(data.decode(‘utf8‘))

技术分享图片

编码:两种方法

x = ‘hello‘
b = bytes(x, encoding = ‘utf-8‘)
x.encode(‘utf8‘)

f = open(‘test‘, ‘wb‘)
f.write(bytes(‘一生所爱‘, encoding = ‘utf-8‘))

技术分享图片

f = open(‘test22‘, ‘wb‘)
f.write(‘我的欢喜‘.encode(‘utf-8‘))

技术分享图片

注意:r w   其实都是默认成 rt   wt   ,只能用来打开文本格式,还有图片,视频等格式,所以要用  rb  wb  ab  这类,转换为二进制,也更适合跨平台。

二、文件操作的其他方法

f = open(‘a.txt‘, ‘w‘, encoding = ‘utf-8‘)
print(f.closed)  #判断文件是否关闭了
print(f.encoding) #取的是文件打开的编码方式(即open里的)
f.write(‘你好‘)   #写入文件用的是open里指定的编码方式
f.flush()  #刷新,保存内容到硬盘
f.close()

技术分享图片技术分享图片

f = open(‘b.txt‘, ‘r‘, encoding = ‘utf-8‘)
print(f.tell())   #光标当前所在位置
f.readline()
print(f.tell())

技术分享图片技术分享图片

为什么是0和8呢,

seek, tell 等光标移动都是以字节为单位

首先刚打开文件,光标在起始位置,所以为 0

读了一行之后,因为utf- 8下,一个中文=3个字节,回车(\r\n)=2个字节,所以,3+3+2=8

############

f.seek(0)  

控制光标到0位置

但要注意,中文等于多个字节,比如b.txt中,“你”=3个字节,不能把光标移到2,然后read,会报错,不能拆分中文字节

read(1): 读一个字符

print(f.read(1))

技术分享图片  

文件的截取

f = open(‘b.txt‘, ‘r+‘, encoding=‘utf-8‘)
f.truncate(10)
f.close()

从0位置截取到10位置,按字节数,需要 r+ 或 a+ ,w+不行,会直接覆盖掉,相当于修改了文件,只保留截取的内容

在windows下,换行就是\r\n,但是python自动把\r\n换成了\n,想取消这一自动化操作,用:

f = open(‘b.txt‘, ‘r‘, encoding = ‘utf8‘, newline = ‘‘)
data = f.readlines()
print(data)
f.close()

技术分享图片

python课堂整理18---文件操作(下)

原文:https://www.cnblogs.com/dabai123/p/11151855.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!