file文件操作 全面解析

# -*- 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()

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()

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'))    # 读取文件最后一行

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) 不大于一行,就扩大一倍

猜你喜欢

转载自blog.csdn.net/weixin_42100915/article/details/80198177