day8--文件管理2
文件处理的模式:
open("文件路径",''打开文件模式'','指定的字符编码')
print(f.edcoding) ----可以查看文件的编码
文件打开模式补充
r+ w+ a+
首先新建一个文本文档。填入内容。
with open(r'b.txt', 'r+', encoding='utf-8')as f:
# print(f.writable())
# print(f.readable())
f.write('哈哈笑') # 打开的文件可以写入,写了三个文字,他替换了b.txt里面的前三个文字
print(f.read()) #无法读出来刚刚写入的内容。因为with还没有执行完毕还没有存入硬盘
with open(r'b.txt', 'w+', encoding='utf-8')as f:
f.write('123haha') #打开的文件可以写入,直接覆盖了原来内容
print(f.read()) #无法读出来刚刚写入的内容。因为with还没有执行完毕还没有存入硬盘
with open(r'b.txt', 'a+', encoding='utf-8')as f:
f.write('小狗,小猫咪') #可以添加,他会直接在文档后面添加。
print(f.read()) #现在是读不出来。需要移动光标才可以读,因为光标在最后面
# 执行一次,内容就添加一次
文件内光标的移动
f.seek(offset,whence)
f.seek(offset,whence)
offset: 相对偏移度 (光标移动的位数)针对的是字节
whence:指定光标位置从何开始
0:从文件开头
1:从当前位置
2:从文件末尾
补充:
utf-8:
中文是3个bytes 英文是1个bytes
gbk:
全部都是2个bytes
open函数不设置encoding,默认是gbk
与encode一毛钱都没有,encoding只是一个参数
除了read里面的参数是针对字符,其他都是针对字节
with open(r'b.txt','r',encoding='utf-8')as f:
print(f.tell()) # 查看光标的位置
f.seek(2, 0) # 2代表光标移动的字节,0是从头开始。
print(f.read(2)) # 在光标位置开始读取2个字符。
with open(r'b.txt','rb')as f:
f.read(3) #光标移动3个字节,二进制中是一个汉字。
f.seek(6, 1) # 光标在当前位置移动6个字节。即2个汉字
print(f.tell()) #光标在地9个字节那边
# print(f.read(3))
print(f.read(3).decode('utf-8')) #解码2进制字符转化为文字
with open(r'b.txt', 'rb')as f:
f.seek(-6, 2)
print(f.tell())
print(f.read(3).decode('utf-8'))
修改文件内容
将文件中经费改为钱
第一种方案:
with open(r'b.txt','r',encoding=('utf-8'))as f:
data = f.read()
# print(data)
# print(type(data))
with open(r'b.txt', 'w', encoding=('utf-8'))as f:
des = data.replace('经费', '钱')
f.write(des)
第二种方案
import os
with open(r'b.txt', 'r', encoding=('utf-8'))as rf,\
open(r'a.txt', 'w', encoding=('utf-8'))as wf:
data = rf.read() #赋值变量名为data
res = data.replace('经费', '钱')
wf.write(res)
os.remove('b.txt') #删除b.txt
os.rename('a.txt','b.txt')# 改名字a.txt改为b.txt
写入文件:
# 写入文件
import time
time = time.strftime('%Y:%m:%d %H:%M:%S')
with open(r'b.txt', 'a', encoding=('utf-8'))as f:
for i in range(3):
f.write(f'{time}:到周末了,可以休息了,好开心\n')
获取文件实时动态:
# 写入文件
import time
time = time.strftime('%Y:%m:%d %H:%M:%S')
with open(r'b.txt', 'a', encoding=('utf-8'))as f:
for i in range(3):
f.write(f'{time}:到周末了,可以休息了,好开心\n')