操作文件的方法

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命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程

Android:片段内的按钮操作

操作栏标签片段中的片段?

VSCode自定义代码片段—— 数组的响应式方法

VSCode自定义代码片段10—— 数组的响应式方法