操作文件的方法

1、重点

读文件

f.read() # 读取所有内容,执行完该操作后,文件指针会移动到文件末尾

f.readline() # 读取一行内容,光标移动到第二行首部

f.readlines() # 读取每一行内容,存放于列表中

f.read()与f.readlines() #都是将内容一次性读入内容,如果内容过大会导致内存溢出,若还想将内容全读入内存,则必须分多次读入,有两种实现方式:
# 方式一
with open('a.txt',mode='rt',encoding='utf-8') as f:
    for line in f:
        print(line) # 同一时刻只读入一行内容到内存中
# 方式二
with open('1.mp4',mode='rb') as f:
    while True:
        data=f.read(1024) # 同一时刻只读入1024个Bytes到内存中
        if len(data) == 0:
            break
        print(data)

写操作
f.write('1111
222
')  # 针对文本模式的写,需要自己写换行符
f.write('1111
222
'.encode('utf-8'))  # 针对b模式的写,需要自己写换行符
f.writelines(['333
','444
'])  # 文件模式
f.writelines([bytes('333
',encoding='utf-8'),'444
'.encode('utf-8')]) #b模式

2、主动控制文件内指针移动

with open('林允儿.txt','r',encoding='utf8')as f:
    print(f.read(6)) #'r'默认为rt,r读取6个字符
with open('林允儿.txt','rb')as f:
    print(f.read(3)) # rb读取3个bytes

f.seek(offset,whence)

offset: 相对偏移度 (光标移动的位数)针对的是字节

whence:指定光标位置从何开始

0:从文件开头

1:从当前位置

2:从文件末尾

补充:

utf-8:

中文是3个bytes

英文是1个bytes

gbk:

中文是2个bytes

英文是1个bytes

open函数不设置encoding,默认是gbk

与encode一毛钱都没有,encoding只是一个参数

除了read里面的参数是针对字符,其他都是针对字节

with open('林允儿.txt','rb')as f: #默认打开文件的编码是gbk
    f.seek(3,0)  # 光标指在3个字节后面, 因为是rb,如果是rt就是指在3个字符后面
    print(f.tell()) # 打印出光标指在的位置
    print(f.read(2))

解码:

with open('林允儿.txt',mode='rb') as f:
    f.seek(3,0)
    print(f.tell())
    print(f.read(3).decode('utf8')) # 读了3个字节,解码成utf8后就是一个中文字的字节

编码:

with open('林允儿.txt','r') as f:
    f.seek(3,0)
    print(f.tell())
    print(f.read(2).encode('gbk')) # r是读字符,,所以读了2位字符后编码成gbk,所以就是4个字节

1模式:

with open('林允儿.txt','rb')as f:
    f.seek(3,1)   # 1就是当前光标位置
    print(f.tell())
    print(f.read(3).decode('utf8')) # 文档怎么编码就用什么解码

2模式:

with open('林允儿.txt',mode='rb') as f:
    f.seek(-6,2)  # 2是光标位置在末尾,-x:往前x字节
    print(f.tell()) #光标目前所在的位置,从前往后数
    print(f.read(5).decode('utf8')) # read是往后读

写入文件:

import time

res = time.strftime('%Y-%m-%d %H:%M:%S')

with open('林允儿.txt','a',encoding='utf-8')as f:
    for i in range(5):
        f.write(f'{res}:sean老师手下留情
')

修改文件内容:

方案一:

with open('林允儿.txt','r',encoding='gbk') as f:
    data = f.read()
    print(data)
    print(type(data))
with open('林允儿.txt','w',encoding='gbk') as f:
    res = data.replace('查楚文','大大')
    f.write(res)

方案二:

import os  # os模块 在修改文件和重命名等操作时都要加

with open('林允儿.txt','r')as rf,
        open('作业2.txt','w')as wf:
    data = rf.read()
    res = data.replace('大大', '查楚文')
    wf.write(res)

os.remove('林允儿.txt')
os.rename('作业2.txt','b.txt')

获取实时动态:

原文地址:https://www.cnblogs.com/hyukoh/p/11822900.html