f = open(‘test.py‘, ‘rb‘, encoding = ‘utf-8‘)
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‘))
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)
print(f.read(1))
f = open(‘b.txt‘, ‘r+‘, encoding=‘utf-8‘) f.truncate(10) f.close()
从0位置截取到10位置,按字节数,需要 r+ 或 a+ ,w+不行,会直接覆盖掉,相当于修改了文件,只保留截取的内容
f = open(‘b.txt‘, ‘r‘, encoding = ‘utf8‘, newline = ‘‘) data = f.readlines() print(data) f.close()
原文:https://www.cnblogs.com/dabai123/p/11151855.html