# -*- coding:utf-8 -*-
f = open('qq', encoding='utf8') # 默认只读打开文件 r encoding:打开文件编码格式
print(f.read()) # 读取全部
print(f.readline()) # 读取一行
print(f.readline(), end="") # end=""不换行
print(f.readline(), end="")
print(f.readable(), end="") # 可读返回True,否则返回Feast
f.close() # 关闭文件 操作完成必须关闭
# writelines(["",""]) 传入一个列表,只能传入字符串,其它类型报错
# *********** b **************************
f = open("qq",'rb') # 二进制打开 字符串---encode-》二进制
print(f.read().decode('utf8')) # decode 转码----》字符串
print(f.read())
f = open("qq",'wb')
f.write(bytes("qqqqq\n",encoding="utf-8")) # bytes转换为二进制,指定输入编码
f.write('小'.encode("utf-8")) #
f.close()
#** seek tell f = open("qq", "rb", encoding="utf-8") # encoding 用utf-8打开文件,如不指定既使用计算默认编码,win是gbk. 打开方式*b f.seek(3) # seek 从哪个字节开始读取,中文3个字节, print(f.tell()) # tell 当前处于文件第几个字节处 print(f.read()) # 从当前字节读取,默认从0 f.close()
# ** truncate f = open("qq", 'r+', encoding="utf-8") # 打开方式 w w+ 除外 f.truncate(2) # truncate 截取字节数。文字3个字节,保留从头到指定字节
f = open("qq", 'rb') # 循环列表两种方式 for i in f: #******建议使用这一种 print(i.decode("utf-8")) # 读一行拿一行 for i in f.readlines(): # 这种方式会先把所有放到内存中,然后在一条条拿出 print(i.decode('utf-8')) # 占用内存
# *********** 读取文件最后一条,两种方式,建议使用第二种**** f = open("qq", 'rb') data = f.readlines() print(data[-1].decode('utf-8')) # 读取文件最后一行 解码为utf-8格式 f = open("qq", 'rb') for i in f: offs = -10 # 初始 从后10个字节 while True: f.seek(offs, 2) # seek 把光标移动到最后 data = f.readlines() # 读取一行,列表格式 if len(data) > 1: print(data[-1].decode('utf-8')) # 最后一行data[-1] break offs *= 2 # len(data) 不大于一行,就扩大一倍
seek 函数
fileObject.seek(offset,whence)
offset – 开始的偏移量,也就是代表需要移动偏移的字节数
whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。
rand() readline() readlines()区别
read() 每次读取整个文件,它通常将读取到底文件内容放到一个字符串变量中,也就是说 .read() 生成文件内容是一个字符串类型
readline()每只读取文件的一行,通常也是读取到的一行内容放到一个字符串变量中,返回str类型
readlines()每次按行读取整个文件内容,将读取到的内容放到一个列表中,返回list类型