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

#** 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类型



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值