操作文件的方法
Posted hyukoh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作文件的方法相关的知识,希望对你有一定的参考价值。
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‘)
获取实时动态:
以上是关于操作文件的方法的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段15——git命令操作一个完整流程